graph update nu met wind / temp
This commit is contained in:
@@ -149,15 +149,16 @@ def send_email_with_graph(image_path, result_df):
|
||||
|
||||
laagste_prijs = result_df['Voorspelde_Prijs'].min()
|
||||
hoogste_prijs = result_df['Voorspelde_Prijs'].max()
|
||||
# en wanneer deze voorkomen
|
||||
laagste_moment = result_df['Voorspelde_Prijs'].idxmin()
|
||||
hoogste_moment = result_df['Voorspelde_Prijs'].idxmax()
|
||||
|
||||
|
||||
body = f"""
|
||||
Hallo,
|
||||
De prijsvoorspelling voor de komende {len(result_df)} uur.
|
||||
|
||||
Dit is de voorspelling van het Linux-script.
|
||||
Hier is de prijsvoorspelling voor de komende {len(result_df)} uur.
|
||||
|
||||
Laagste prijs: {laagste_prijs:.4f}
|
||||
Hoogste prijs: {hoogste_prijs:.4f}
|
||||
Laagste prijs: {laagste_prijs:.4f} (op {laagste_moment})
|
||||
Hoogste prijs: {hoogste_prijs:.4f} (op {hoogste_moment})
|
||||
|
||||
Volledige voorspelling:
|
||||
{result_df.to_string()}
|
||||
@@ -223,29 +224,67 @@ try:
|
||||
print(resultaat_df)
|
||||
print("="*70)
|
||||
|
||||
# --- NIEUW: Grafiek maken en e-mailen ---
|
||||
print("\n📊 Grafiek genereren...")
|
||||
# --- NIEUW: Grafiek maken (met 2 Y-assen) en e-mailen ---
|
||||
print("\n📊 Grafiek genereren (met temperatuur en wind)...")
|
||||
try:
|
||||
fig, ax = plt.subplots(figsize=(15, 8))
|
||||
resultaat_df.plot(
|
||||
ax=ax,
|
||||
title=f'Energieprijs Voorspelling (Linux - {len(resultaat_df)} uur)',
|
||||
legend=False,
|
||||
grid=True,
|
||||
style='.-'
|
||||
# Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs
|
||||
fig, ax1 = plt.subplots(figsize=(15, 8))
|
||||
|
||||
# Plot de Prijs op de linker-as (ax1)
|
||||
ax1.plot(
|
||||
resultaat_df.index,
|
||||
resultaat_df['Voorspelde_Prijs'],
|
||||
color='blue',
|
||||
marker='.', # <-- AANPASSING
|
||||
linestyle='-', # <-- AANPASSING
|
||||
label='Voorspelde Prijs'
|
||||
)
|
||||
ax.set_ylabel('Voorspelde Prijs')
|
||||
ax.set_xlabel('Datum en Tijd')
|
||||
ax1.set_ylabel('Voorspelde Prijs (€)', color='blue')
|
||||
ax1.tick_params(axis='y', labelcolor='blue')
|
||||
ax1.set_xlabel('Datum en Tijd')
|
||||
ax1.grid(True, which='major', axis='x') # Alleen verticale gridlijnen
|
||||
|
||||
# Maak de TWEEDE Y-as (ax2) die de X-as deelt
|
||||
ax2 = ax1.twinx()
|
||||
|
||||
laagste_prijs = resultaat_df['Voorspelde_Prijs'].min()
|
||||
hoogste_prijs = resultaat_df['Voorspelde_Prijs'].max()
|
||||
ax.axhline(laagste_prijs, color='green', linestyle='--', linewidth=0.8)
|
||||
ax.axhline(hoogste_prijs, color='red', linestyle='--', linewidth=0.8)
|
||||
# Pak de weerdata die bij de voorspelling hoort
|
||||
weer_toekomst = werk_df.loc[te_voorspellen_tijden]
|
||||
|
||||
# Plot Temperatuur op de rechter-as (ax2)
|
||||
ax2.plot(
|
||||
weer_toekomst.index,
|
||||
weer_toekomst['temperatuur'],
|
||||
color='red',
|
||||
marker='.', # <-- AANPASSING
|
||||
linestyle='--', # <-- AANPASSING
|
||||
label='Temperatuur (°C)'
|
||||
)
|
||||
# Plot Windsnelheid op de rechter-as (ax2)
|
||||
ax2.plot(
|
||||
weer_toekomst.index,
|
||||
weer_toekomst['wind_snelheid'],
|
||||
color='green',
|
||||
marker='x', # <-- AANPASSING
|
||||
linestyle=':', # <-- AANPASSING
|
||||
label='Windsnelheid (km/u)'
|
||||
)
|
||||
ax2.set_ylabel('Temperatuur / Windsnelheid', color='black')
|
||||
ax2.tick_params(axis='y', labelcolor='black')
|
||||
|
||||
# Titel en gecombineerde legenda
|
||||
plt.title(f'Energieprijs & Weer Voorspelling ({len(resultaat_df)} uur)', fontsize=16)
|
||||
|
||||
# Voeg legendas van BEIDE assen samen
|
||||
lines1, labels1 = ax1.get_legend_handles_labels()
|
||||
lines2, labels2 = ax2.get_legend_handles_labels()
|
||||
ax2.legend(lines1 + lines2, labels1 + labels2, loc='upper left')
|
||||
|
||||
# Sla de grafiek op
|
||||
plt.savefig(GRAFIEK_BESTAND)
|
||||
plt.close(fig) # Geheugen vrijgeven
|
||||
print(f"✅ Grafiek opgeslagen als: {GRAFIEK_BESTAND}")
|
||||
|
||||
# Stuur de e-mail (deze functie is onveranderd)
|
||||
send_email_with_graph(GRAFIEK_BESTAND, resultaat_df)
|
||||
|
||||
except Exception as e:
|
||||
|
||||
Reference in New Issue
Block a user