Загрузка данных


# -*- 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()