diff --git a/prijs_voorspelling_windows.png b/prijs_voorspelling_windows.png index b5b0dd1..b6586a3 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 d61430b..cdd59a3 100644 --- a/voorspel_advanced.py +++ b/voorspel_advanced.py @@ -8,6 +8,7 @@ import holidays # --- NIEUW: Imports voor grafiek en e-mail --- import matplotlib.pyplot as plt +import matplotlib.dates as mdates import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText @@ -143,7 +144,7 @@ def send_email_with_graph(image_path, result_df): print("\nšŸ“¬ E-mail opstellen...") msg = MIMEMultipart() - msg['Subject'] = f"Prijsvoorspelling (Windows Test) {datetime.now().strftime('%Y-%m-%d')}" + msg['Subject'] = f"Energie Prijsvoorspelling [energy_prediction] {datetime.now().strftime('%d-%m-%Y')}" msg['From'] = EMAIL_CONFIG['sender'] msg['To'] = EMAIL_CONFIG['receiver'] @@ -217,7 +218,7 @@ try: print(resultaat_df) print("="*70) - # --- NIEUW: Grafiek maken (met 2 Y-assen) en e-mailen --- + # Grafiek maken (met 2 Y-assen en NL opmaak) en e-mailen --- print("\nšŸ“Š Grafiek genereren (met temperatuur en wind)...") try: # Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs @@ -228,19 +229,18 @@ try: resultaat_df.index, resultaat_df['Voorspelde_Prijs'], color='blue', - marker='.', # <-- AANPASSING - linestyle='-', # <-- AANPASSING + marker='.', + linestyle='-', label='Voorspelde Prijs' ) 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 + ax1.grid(True, which='major', axis='x') # 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) @@ -248,8 +248,8 @@ try: weer_toekomst.index, weer_toekomst['temperatuur'], color='red', - marker='.', # <-- AANPASSING - linestyle='--', # <-- AANPASSING + marker='.', + linestyle='--', label='Temperatuur (°C)' ) # Plot Windsnelheid op de rechter-as (ax2) @@ -257,8 +257,8 @@ try: weer_toekomst.index, weer_toekomst['wind_snelheid'], color='green', - marker='x', # <-- AANPASSING - linestyle=':', # <-- AANPASSING + marker='x', + linestyle=':', label='Windsnelheid (km/u)' ) ax2.set_ylabel('Temperatuur / Windsnelheid', color='black') @@ -266,12 +266,25 @@ try: # 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') + # --- NIEUW: X-as opmaken (Nederlands formaat) --- + # Definieer het formaat: Dag-Maand Uur:Minuut (bv: 13-11 22:00) + date_format = mdates.DateFormatter('%d-%m %H:%M') + + # Pas het formaat toe op de X-as + ax1.xaxis.set_major_formatter(date_format) + + # Roteer de labels voor betere leesbaarheid + plt.setp(ax1.get_xticklabels(), rotation=30, ha='right') + # --- EINDE NIEUWE CODE --- + + # --- AANGEPAST: Gebruik fig.tight_layout() --- + # Zorgt dat de geroteerde labels netjes in de afbeelding passen + fig.tight_layout() + # Sla de grafiek op plt.savefig(GRAFIEK_BESTAND) plt.close(fig) # Geheugen vrijgeven @@ -282,7 +295,7 @@ try: except Exception as e: print(f"āŒ Fout bij genereren van grafiek: {e}") - # --- EINDE NIEUWE BLOK --- + # --- EINDE BLOK --- except Error as e: print(f"āŒ Fout met MySQL verbinding: {e}") diff --git a/voorspel_advanced_linux.py b/voorspel_advanced_linux.py index a1a771c..4889767 100644 --- a/voorspel_advanced_linux.py +++ b/voorspel_advanced_linux.py @@ -8,6 +8,7 @@ import holidays # --- NIEUW: Imports voor grafiek en e-mail --- import matplotlib.pyplot as plt +import matplotlib.dates as mdates import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText @@ -143,7 +144,7 @@ def send_email_with_graph(image_path, result_df): print("\nšŸ“¬ E-mail opstellen...") msg = MIMEMultipart() - msg['Subject'] = f"Prijsvoorspelling (Linux) {datetime.now().strftime('%Y-%m-%d')}" + msg['Subject'] = f"Energie Prijsvoorspelling [energy_prediction] {datetime.now().strftime('%d-%m-%Y')}" msg['From'] = EMAIL_CONFIG['sender'] msg['To'] = EMAIL_CONFIG['receiver'] @@ -224,7 +225,7 @@ try: print(resultaat_df) print("="*70) - # --- NIEUW: Grafiek maken (met 2 Y-assen) en e-mailen --- + # Grafiek maken (met 2 Y-assen en NL opmaak) en e-mailen --- print("\nšŸ“Š Grafiek genereren (met temperatuur en wind)...") try: # Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs @@ -235,19 +236,18 @@ try: resultaat_df.index, resultaat_df['Voorspelde_Prijs'], color='blue', - marker='.', # <-- AANPASSING - linestyle='-', # <-- AANPASSING + marker='.', + linestyle='-', label='Voorspelde Prijs' ) 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 + ax1.grid(True, which='major', axis='x') # 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) @@ -255,8 +255,8 @@ try: weer_toekomst.index, weer_toekomst['temperatuur'], color='red', - marker='.', # <-- AANPASSING - linestyle='--', # <-- AANPASSING + marker='.', + linestyle='--', label='Temperatuur (°C)' ) # Plot Windsnelheid op de rechter-as (ax2) @@ -264,8 +264,8 @@ try: weer_toekomst.index, weer_toekomst['wind_snelheid'], color='green', - marker='x', # <-- AANPASSING - linestyle=':', # <-- AANPASSING + marker='x', + linestyle=':', label='Windsnelheid (km/u)' ) ax2.set_ylabel('Temperatuur / Windsnelheid', color='black') @@ -273,12 +273,25 @@ try: # 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') + # --- NIEUW: X-as opmaken (Nederlands formaat) --- + # Definieer het formaat: Dag-Maand Uur:Minuut (bv: 13-11 22:00) + date_format = mdates.DateFormatter('%d-%m %H:%M') + + # Pas het formaat toe op de X-as + ax1.xaxis.set_major_formatter(date_format) + + # Roteer de labels voor betere leesbaarheid + plt.setp(ax1.get_xticklabels(), rotation=30, ha='right') + # --- EINDE NIEUWE CODE --- + + # --- AANGEPAST: Gebruik fig.tight_layout() --- + # Zorgt dat de geroteerde labels netjes in de afbeelding passen + fig.tight_layout() + # Sla de grafiek op plt.savefig(GRAFIEK_BESTAND) plt.close(fig) # Geheugen vrijgeven @@ -289,7 +302,7 @@ try: except Exception as e: print(f"āŒ Fout bij genereren van grafiek: {e}") - # --- EINDE NIEUWE BLOK --- + # --- EINDE BLOK --- except Error as e: print(f"āŒ Fout met MySQL verbinding: {e}")