graph update nu met wind / temp
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 77 KiB After Width: | Height: | Size: 124 KiB |
@@ -149,15 +149,14 @@ def send_email_with_graph(image_path, result_df):
|
|||||||
|
|
||||||
laagste_prijs = result_df['Voorspelde_Prijs'].min()
|
laagste_prijs = result_df['Voorspelde_Prijs'].min()
|
||||||
hoogste_prijs = result_df['Voorspelde_Prijs'].max()
|
hoogste_prijs = result_df['Voorspelde_Prijs'].max()
|
||||||
|
laagste_moment = result_df['Voorspelde_Prijs'].idxmin()
|
||||||
|
hoogste_moment = result_df['Voorspelde_Prijs'].idxmax()
|
||||||
|
|
||||||
body = f"""
|
body = f"""
|
||||||
Hallo,
|
Prijsvoorspelling voor de komende {len(result_df)} uur.
|
||||||
|
|
||||||
Dit is een test van het Windows script.
|
Laagste prijs: {laagste_prijs:.4f} (op {laagste_moment})
|
||||||
Hier is de prijsvoorspelling voor de komende {len(result_df)} uur.
|
Hoogste prijs: {hoogste_prijs:.4f} (op {hoogste_moment})
|
||||||
|
|
||||||
Laagste prijs: {laagste_prijs:.4f}
|
|
||||||
Hoogste prijs: {hoogste_prijs:.4f}
|
|
||||||
|
|
||||||
Volledige voorspelling:
|
Volledige voorspelling:
|
||||||
{result_df.to_string()}
|
{result_df.to_string()}
|
||||||
@@ -218,29 +217,67 @@ try:
|
|||||||
print(resultaat_df)
|
print(resultaat_df)
|
||||||
print("="*70)
|
print("="*70)
|
||||||
|
|
||||||
# --- NIEUW: Grafiek maken en e-mailen ---
|
# --- NIEUW: Grafiek maken (met 2 Y-assen) en e-mailen ---
|
||||||
print("\n📊 Grafiek genereren...")
|
print("\n📊 Grafiek genereren (met temperatuur en wind)...")
|
||||||
try:
|
try:
|
||||||
fig, ax = plt.subplots(figsize=(15, 8))
|
# Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs
|
||||||
resultaat_df.plot(
|
fig, ax1 = plt.subplots(figsize=(15, 8))
|
||||||
ax=ax,
|
|
||||||
title=f'Energieprijs Voorspelling ({len(resultaat_df)} uur vooruit)',
|
# Plot de Prijs op de linker-as (ax1)
|
||||||
legend=False,
|
ax1.plot(
|
||||||
grid=True,
|
resultaat_df.index,
|
||||||
style='.-'
|
resultaat_df['Voorspelde_Prijs'],
|
||||||
|
color='blue',
|
||||||
|
marker='.', # <-- AANPASSING
|
||||||
|
linestyle='-', # <-- AANPASSING
|
||||||
|
label='Voorspelde Prijs'
|
||||||
)
|
)
|
||||||
ax.set_ylabel('Voorspelde Prijs')
|
ax1.set_ylabel('Voorspelde Prijs (€)', color='blue')
|
||||||
ax.set_xlabel('Datum en Tijd')
|
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()
|
# Pak de weerdata die bij de voorspelling hoort
|
||||||
hoogste_prijs = resultaat_df['Voorspelde_Prijs'].max()
|
weer_toekomst = werk_df.loc[te_voorspellen_tijden]
|
||||||
ax.axhline(laagste_prijs, color='green', linestyle='--', linewidth=0.8)
|
|
||||||
ax.axhline(hoogste_prijs, color='red', linestyle='--', linewidth=0.8)
|
|
||||||
|
|
||||||
|
# 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.savefig(GRAFIEK_BESTAND)
|
||||||
plt.close(fig) # Geheugen vrijgeven
|
plt.close(fig) # Geheugen vrijgeven
|
||||||
print(f"✅ Grafiek opgeslagen als: {GRAFIEK_BESTAND}")
|
print(f"✅ Grafiek opgeslagen als: {GRAFIEK_BESTAND}")
|
||||||
|
|
||||||
|
# Stuur de e-mail (deze functie is onveranderd)
|
||||||
send_email_with_graph(GRAFIEK_BESTAND, resultaat_df)
|
send_email_with_graph(GRAFIEK_BESTAND, resultaat_df)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
@@ -149,15 +149,16 @@ def send_email_with_graph(image_path, result_df):
|
|||||||
|
|
||||||
laagste_prijs = result_df['Voorspelde_Prijs'].min()
|
laagste_prijs = result_df['Voorspelde_Prijs'].min()
|
||||||
hoogste_prijs = result_df['Voorspelde_Prijs'].max()
|
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"""
|
body = f"""
|
||||||
Hallo,
|
De prijsvoorspelling voor de komende {len(result_df)} uur.
|
||||||
|
|
||||||
Dit is de voorspelling van het Linux-script.
|
Laagste prijs: {laagste_prijs:.4f} (op {laagste_moment})
|
||||||
Hier is de prijsvoorspelling voor de komende {len(result_df)} uur.
|
Hoogste prijs: {hoogste_prijs:.4f} (op {hoogste_moment})
|
||||||
|
|
||||||
Laagste prijs: {laagste_prijs:.4f}
|
|
||||||
Hoogste prijs: {hoogste_prijs:.4f}
|
|
||||||
|
|
||||||
Volledige voorspelling:
|
Volledige voorspelling:
|
||||||
{result_df.to_string()}
|
{result_df.to_string()}
|
||||||
@@ -223,29 +224,67 @@ try:
|
|||||||
print(resultaat_df)
|
print(resultaat_df)
|
||||||
print("="*70)
|
print("="*70)
|
||||||
|
|
||||||
# --- NIEUW: Grafiek maken en e-mailen ---
|
# --- NIEUW: Grafiek maken (met 2 Y-assen) en e-mailen ---
|
||||||
print("\n📊 Grafiek genereren...")
|
print("\n📊 Grafiek genereren (met temperatuur en wind)...")
|
||||||
try:
|
try:
|
||||||
fig, ax = plt.subplots(figsize=(15, 8))
|
# Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs
|
||||||
resultaat_df.plot(
|
fig, ax1 = plt.subplots(figsize=(15, 8))
|
||||||
ax=ax,
|
|
||||||
title=f'Energieprijs Voorspelling (Linux - {len(resultaat_df)} uur)',
|
# Plot de Prijs op de linker-as (ax1)
|
||||||
legend=False,
|
ax1.plot(
|
||||||
grid=True,
|
resultaat_df.index,
|
||||||
style='.-'
|
resultaat_df['Voorspelde_Prijs'],
|
||||||
|
color='blue',
|
||||||
|
marker='.', # <-- AANPASSING
|
||||||
|
linestyle='-', # <-- AANPASSING
|
||||||
|
label='Voorspelde Prijs'
|
||||||
)
|
)
|
||||||
ax.set_ylabel('Voorspelde Prijs')
|
ax1.set_ylabel('Voorspelde Prijs (€)', color='blue')
|
||||||
ax.set_xlabel('Datum en Tijd')
|
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()
|
# Pak de weerdata die bij de voorspelling hoort
|
||||||
hoogste_prijs = resultaat_df['Voorspelde_Prijs'].max()
|
weer_toekomst = werk_df.loc[te_voorspellen_tijden]
|
||||||
ax.axhline(laagste_prijs, color='green', linestyle='--', linewidth=0.8)
|
|
||||||
ax.axhline(hoogste_prijs, color='red', linestyle='--', linewidth=0.8)
|
|
||||||
|
|
||||||
|
# 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.savefig(GRAFIEK_BESTAND)
|
||||||
plt.close(fig) # Geheugen vrijgeven
|
plt.close(fig) # Geheugen vrijgeven
|
||||||
print(f"✅ Grafiek opgeslagen als: {GRAFIEK_BESTAND}")
|
print(f"✅ Grafiek opgeslagen als: {GRAFIEK_BESTAND}")
|
||||||
|
|
||||||
|
# Stuur de e-mail (deze functie is onveranderd)
|
||||||
send_email_with_graph(GRAFIEK_BESTAND, resultaat_df)
|
send_email_with_graph(GRAFIEK_BESTAND, resultaat_df)
|
||||||
|
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
|
|||||||
Reference in New Issue
Block a user