# -*- coding: utf-8 -*-
# modules/forecast_visualization.py
import matplotlib.pyplot as plt
import csv
from datetime import datetime, timedelta
def update_graph(ax, canvas, data):
"""
Обновляет график на холсте (canvas).
Ключевое изменение: использует параметр data["show_legend"] для управления видимостью легенды.
"""
# Очищаем оси перед новой отрисовкой
ax.clear()
lower_bound = data.get('lower_bound')
median = data.get('median')
upper_bound = data.get('upper_bound')
base_level = data.get('base_level', 0)
trajectory = data.get('delta_history', [])
show_legend = data.get('show_legend', True) # Берем значение из данных
# Рисуем горизонтальные линии (границы и медиану)
if lower_bound is not None:
ax.axhline(y=lower_bound, color='red', linestyle='--', label='Нижняя граница')
if median is not None:
ax.axhline(y=median , color='green', linestyle='-', label='Медиана')
if upper_bound is not None:
ax.axhline(y=upper_bound , color='blue', linestyle='--', label='Верхняя граница')
# Рисуем траекторию (линию графика), если есть данные
if trajectory and len(trajectory) > 1:
start_date = datetime.now().date()
step_days = int(data.get("step_days", 1)) # Получаем шаг из данных, если он там есть
dates_for_plot = []
for i in range(len(trajectory)):
day_offset = i * step_days
plot_date = start_date + timedelta(days=day_offset)
dates_for_plot.append(plot_date)
ax.plot(dates_for_plot, trajectory,
color='orange', marker='o',
linewidth=2, markersize=6,
label='Смоделированная динамика')
# --- ЭТО ИСПРАВЛЕНИЕ: Управляем видимостью легенды ---
# Проверяем флаг из словаря data. Если он False - НЕ показываем легенду.
if show_legend:
ax.legend(loc='upper left')
# Настраиваем внешний вид графика (всегда)
ax.set_ylabel('Накопленное значение')
ax.set_xlabel('Дата')
ax.grid(True, linestyle='--', alpha=0.7)
# Поворачиваем даты на оси X вертикально, чтобы они не накладывались
plt.setp(ax.xaxis.get_majorticklabels(), rotation=90, ha="right")
# Перерисовываем canvas (это очень важно!)
canvas.draw()