graph update nu met wind / temp

This commit is contained in:
Mark Kors
2025-11-13 21:34:41 +01:00
parent 57afb51cc8
commit 0e60d3d24b
3 changed files with 119 additions and 43 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 77 KiB

After

Width:  |  Height:  |  Size: 124 KiB

View File

@@ -149,15 +149,14 @@ def send_email_with_graph(image_path, result_df):
laagste_prijs = result_df['Voorspelde_Prijs'].min()
hoogste_prijs = result_df['Voorspelde_Prijs'].max()
laagste_moment = result_df['Voorspelde_Prijs'].idxmin()
hoogste_moment = result_df['Voorspelde_Prijs'].idxmax()
body = f"""
Hallo,
Prijsvoorspelling voor de komende {len(result_df)} uur.
Dit is een test van het Windows 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()}
@@ -218,29 +217,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 ({len(resultaat_df)} uur vooruit)',
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
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)
# Maak de TWEEDE Y-as (ax2) die de X-as deelt
ax2 = ax1.twinx()
# 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:

View File

@@ -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
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)
# Maak de TWEEDE Y-as (ax2) die de X-as deelt
ax2 = ax1.twinx()
# 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: