# 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
}