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