CoolFace
Modelpublic

Asssssiya/crop-monitoring

sourceHugging Faceapache-2.0updated 1y agoView on Hugging Face
0likes
Model Card

import matplotlib.pyplot as plt import numpy as np from matplotlib.ticker import MultipleLocator import matplotlib.dates as mdates from datetime import datetime

Настройка стиля графиков

plt.style.use('ggplot') plt.rcParams.update({'font.family': 'Arial', 'font.size': 10})

Создаем фигуру с тремя субграфиками

fig, (ax1, ax2, ax3) = plt.subplots(3, 1, figsize=(10, 12)) fig.suptitle('Мониторинг Поля 1 (01.01.2025 - 21.05.2025)', fontsize=14, fontweight='bold')

1. График NDVI и влажности почвы

months = ['Янв', 'Фев', 'Мар', 'Апр', 'Май'] ndvi = [0.0, 0.05, 0.15, 0.22, 0.28] moisture = [95, 85, 70, 60, 54]

Создаем двойные оси

ax1b = ax1.twinx() ax1.plot(months, moisture, 'o-', color='#1f77b4', linewidth=2, markersize=8, label='Влажность почвы') ax1b.plot(months, ndvi, 's-', color='#2ca02c', linewidth=2, markersize=8, label='NDVI')

Заливка для NDVI

ax1b.fill_between(months, ndvi, color='#2ca02c', alpha=0.1)

Настройка осей и меток

ax1.setylabel('Влажность почвы (%)', color='#1f77b4') ax1b.setylabel('NDVI', color='#2ca02c') ax1.tickparams(axis='y', colors='#1f77b4') ax1b.tickparams(axis='y', colors='#2ca02c') ax1.set_title('Динамика NDVI и влажности почвы', pad=15)

Горизонтальные линии для индикации уровней

ax1.axhline(y=70, color='#1f77b4', linestyle='--', alpha=0.3) ax1.text(4.5, 72, 'Переувлажнение', color='#1f77b4', ha='right') ax1.axhline(y=40, color='#1f77b4', linestyle='--', alpha=0.3) ax1.text(4.5, 42, 'Оптимум', color='#1f77b4', ha='right') ax1b.axhline(y=0.2, color='#2ca02c', linestyle='--', alpha=0.3) ax1b.text(4.5, 0.21, 'Начало вегетации', color='#2ca02c', ha='right')

2. График температуры с зонами заморозков

mintemps = [-32, -25, -10, -2, 5] ax2.plot(months, mintemps, 'o-', color='#d62728', linewidth=2, markersize=8) ax2.setylabel('Температура (°C)') ax2.settitle('Минимальная температура воздуха', pad=15)

Заливка зоны заморозков

ax2.fillbetween(months, mintemps, [0]*5, where=np.array(min_temps) < 0, color='#8c8c8c', alpha=0.3, label='Зона заморозков')

Отметка критической точки

ax2.plot('Апр', -2, 'rx', markersize=12, markeredgewidth=2, label='Критическая точка заморозков') ax2.axvline(x=2.7, color='r', linestyle='--', alpha=0.5) # Март-Апрель ax2.text(2.8, -20, 'Середина апреля\n(конец заморозков)', color='r', va='center')

3. График продуктивной влаги

aprilmay = ['Апр', 'Май'] productivemoisture = [80, 61.1] ax3.bar(aprilmay, productivemoisture, color='#ff7f0e', alpha=0.7) ax3.setylabel('Продуктивная влага (мм)') ax3.settitle('Доступная растениям влага', pad=15) ax3.set_ylim(0, 100)

Порог полива

ax3.axhline(y=70, color='r', linestyle='--') ax3.text(1.7, 72, 'Порог полива (70 мм)', color='r', ha='right') ax3.text(0, 85, '80 мм', ha='center', va='bottom', fontweight='bold') ax3.text(1, 65, '61.1 мм', ha='center', va='bottom', fontweight='bold')

Общие настройки

for ax in (ax1, ax2, ax3): ax.grid(True, linestyle='--', alpha=0.7) ax.set_xlabel('Месяцы')

Добавление легенд

ax1.legend(loc='upper left', frameon=True) ax1b.legend(loc='upper right', frameon=True) ax2.legend(loc='lower right', frameon=True)

plt.tightlayout() plt.subplotsadjust(top=0.93, hspace=0.3) plt.savefig('cropmonitoringfield1.png', dpi=300, bbox_inches='tight') plt.show()