diff --git a/prijs_voorspelling_windows.png b/prijs_voorspelling_windows.png index 7de974b..b5b0dd1 100644 Binary files a/prijs_voorspelling_windows.png and b/prijs_voorspelling_windows.png differ diff --git a/voorspel_advanced.py b/voorspel_advanced.py index b1a4d28..d61430b 100644 --- a/voorspel_advanced.py +++ b/voorspel_advanced.py @@ -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, - -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} +Prijsvoorspelling voor de komende {len(result_df)} uur. + +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 + + # 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: diff --git a/voorspel_advanced_linux.py b/voorspel_advanced_linux.py index d3fb08e..a1a771c 100644 --- a/voorspel_advanced_linux.py +++ b/voorspel_advanced_linux.py @@ -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: