import matplotlib.pyplot as plt
import numpy as np

# Данные для Хабаровска
months = ['I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', 'X', 'XI', 'XII']
month_numbers = np.arange(1, 13)

# 1. Температура воздуха (градусы Цельсия)
temp = [-21, -17, -7, 3, 11, 17, 21, 20, 13, 4, -7, -9]

# 2. Продолжительность светового дня (часы)
daylight = [9.0, 10.5, 12.5, 14.0, 15.5, 16.5, 16.0, 14.5, 13.0, 11.0, 9.5, 8.5]

# 3. Глубина промерзания грунта (см) - приведенные данные
frost_depth = [150, 180, 210, 230, 150, 0, 0, 0, 0, 30, 70, 110]

# 4. Осадки (мм)
precipitation = [12, 6, 16, 36, 56, 73, 125, 131, 80, 44, 22, 14]

# 5. Высота снежного покрова (см)
snow_height = [18, 23, 25, 5, 0, 0, 0, 0, 0, 2, 8, 14]

fig, ax1 = plt.subplots(figsize=(12, 7))

# График температуры (primary axis - красный)
color = 'tab:red'
ax1.set_xlabel('Месяцы')
ax1.set_ylabel('Температура воздуха (°C)', color=color)
line1 = ax1.plot(month_numbers, temp, color=color, marker='o', linewidth=2, label='Температура воздуха')
ax1.tick_params(axis='y', labelcolor=color)
ax1.grid(True, linestyle='--', alpha=0.5)
ax1.set_xticks(month_numbers)
ax1.set_xticklabels(months)

# Создаем вторую ось для остальных параметров
ax2 = ax1.twinx()
ax2.set_ylabel('Осадки (мм) / Высота снега (см) / Глубина промерзания (см)', color='tab:blue')

# График осадков (столбцы)
bars1 = ax2.bar(month_numbers, precipitation, width=0.4, alpha=0.3, color='skyblue', edgecolor='blue', label='Осадки', align='center')

# График снежного покрова
line2 = ax2.plot(month_numbers, snow_height, color='cyan', marker='s', linewidth=2, label='Высота снежного покрова')

# График глубины промерзания (инвертировать шкалу для наглядности)
line3 = ax2.plot(month_numbers, frost_depth, color='brown', marker='^', linewidth=2, label='Глубина промерзания')

# График продолжительности светового дня (относится к первичной оси, но для наглядности добавим как линию)
# Чтобы не перегружать график, можно добавить метки у точек
ax1.plot(month_numbers, daylight, color='green', marker='d', linewidth=1.5, linestyle='--', label='Световой день * 1.5')

# Настройка легенды
lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1 + lines2, labels1 + labels2, loc='upper left')

ax1.set_title('Климатограмма района строительства (г. Хабаровск)')
fig.tight_layout()
plt.show()