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


# modules/forecast_visualization.py
import matplotlib.dates as mdates
from datetime import timedelta

class GraphUpdater:
    """Класс для подготовки данных графика."""
    def __init__(self, start_date, step_days):
        self.start_date = start_date
        self.step_days = step_days

    def prepare_plot_data(self, result_data, trajectory, daily_values_history):
        """
        Готовит все данные для отрисовки.
        Возвращает словарь с координатами точек, датами и границами.
        """
        lower_bound = result_data['lower_bound']

        # Подготовка дат для оси X
        dates_for_plot = []
        for i in range(len(trajectory)):
            day_offset = i * self.step_days
            plot_date = self.start_date + timedelta(days=day_offset)
            dates_for_plot.append(plot_date)

        # Поиск точки пересечения
        date_of_intersection = None
        y_coord = lower_bound
        for idx, val in enumerate(daily_values_history):
            if val >= lower_bound:
                date_of_intersection = self.start_date + timedelta(days=idx)
                y_coord = val
                break

        x_index = 0
        if date_of_intersection and len(trajectory) > 1:
            x_index = int((date_of_intersection - self.start_date).days / self.step_days)

        return {
            "has_trajectory": len(trajectory) > 1,
            "dates": dates_for_plot,
            "trajectory": trajectory,
            "lower_bound": lower_bound,
            "median": result_data["median"],
            "upper_bound": result_data["upper_bound"],
            "intersection_x_idx": x_index,
            "intersection_y_val": y_coord,
            "intersection_date": date_of_intersection
        }