File size: 3,523 Bytes
838f69f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
import seaborn as sns
import matplotlib.pyplot as plt
import numpy as np  
from predict_function import predict 
   
def calculate_plot(total_att, total_memory, total_fluency, total_speech, total_spatial):
          
            
                    labels = ['Внимание', 'Память', 'Беглость', 'Речь', 'Пространство']
                    data = np.array([total_att, total_memory, total_fluency, total_speech, total_spatial], dtype=np.float32)
                    max_value = np.array([18, 26, 14, 26, 16 ], dtype=np.float32)
                    relative_data = np.divide(data, max_value )* 100
                    plt.close('all')
                    fig=plt.figure(figsize=(6, 5))
                    ax=sns.barplot(y=labels, x=relative_data, palette="Blues_d", hue=labels, legend=False)
                        # Добавляем подписи осей
                    ax.set_xlabel('Процент сохранных функций', fontsize=12, labelpad=10)
                    ax.set_ylabel('Когнитивные функции', fontsize=12, labelpad=10)
    

                    plt.xticks(fontsize=10)
                    plt.yticks(fontsize=10)
                    plt.title('Оценка когнитивных функций', fontsize=14, pad=20)
    
   
                    ax.grid(True, linestyle='--', alpha=0.3)
                    
                    
                    
                    plt.title(f"Когнитивный профиль. Общий балл:{np.sum(data)}")
                
                
                    plt.tight_layout()
            
                    return fig
                
def predict_plot(total, total_att, total_memory, total_fluency, total_speech, total_spatial, age):
    
    data=[total, total_att, total_memory, total_fluency, total_speech, total_spatial, age]
    
    dict_data = predict(data)
            # 3. Создание графика
    plt.close('all')  # Закрываем предыдущие графики
    fig, ax=plt.subplots(figsize=(6,4)) # Увеличил размер для читаемости
        
            
        # Сортируем по значениям для лучшего отображения
    sorted_items = sorted(dict_data.items(), key=lambda x: x[1])
    labels = [item[0] for item in sorted_items]
    values = [item[1] for item in sorted_items]
        
        # 5. Построение графика
    bars = ax.barh(labels, values, color='skyblue')
        
        # 6. Выделение максимального значения
    max_idx = np.argmax(values)
    bars[max_idx].set_color('green')
        
        # 7. Добавление значений на график
    for bar in bars:
        width = bar.get_width()
        ax.text(width + 0.01, bar.get_y() + bar.get_height()/2,
                   f'{width:.2f}',
                   va='center', ha='left', fontsize=9)
        
        # 8. Настройка оформления
        ax.set_title(f'Нарушения соответствуют: {labels[max_idx]}', 
                   fontsize=12, pad=10)
        ax.set_xlabel('Вероятность', fontsize=10)
        ax.set_ylabel('Тип нарушений', fontsize=10)
        ax.set_xlim(0, 1.1 if max(values) <= 1 else None)  # Автоподбор границ
        
        plt.tight_layout()
        return fig