graph update, title, date, time

This commit is contained in:
Mark Kors
2025-11-13 21:52:11 +01:00
parent 0e60d3d24b
commit ead2ae8654
3 changed files with 52 additions and 26 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 124 KiB

After

Width:  |  Height:  |  Size: 137 KiB

View File

@@ -8,6 +8,7 @@ import holidays
# --- NIEUW: Imports voor grafiek en e-mail --- # --- NIEUW: Imports voor grafiek en e-mail ---
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import smtplib import smtplib
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText from email.mime.text import MIMEText
@@ -143,7 +144,7 @@ def send_email_with_graph(image_path, result_df):
print("\n📬 E-mail opstellen...") print("\n📬 E-mail opstellen...")
msg = MIMEMultipart() 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['From'] = EMAIL_CONFIG['sender']
msg['To'] = EMAIL_CONFIG['receiver'] msg['To'] = EMAIL_CONFIG['receiver']
@@ -217,7 +218,7 @@ try:
print(resultaat_df) print(resultaat_df)
print("="*70) 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)...") print("\n📊 Grafiek genereren (met temperatuur en wind)...")
try: try:
# Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs # Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs
@@ -228,19 +229,18 @@ try:
resultaat_df.index, resultaat_df.index,
resultaat_df['Voorspelde_Prijs'], resultaat_df['Voorspelde_Prijs'],
color='blue', color='blue',
marker='.', # <-- AANPASSING marker='.',
linestyle='-', # <-- AANPASSING linestyle='-',
label='Voorspelde Prijs' label='Voorspelde Prijs'
) )
ax1.set_ylabel('Voorspelde Prijs (€)', color='blue') ax1.set_ylabel('Voorspelde Prijs (€)', color='blue')
ax1.tick_params(axis='y', labelcolor='blue') ax1.tick_params(axis='y', labelcolor='blue')
ax1.set_xlabel('Datum en Tijd') 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 # Maak de TWEEDE Y-as (ax2) die de X-as deelt
ax2 = ax1.twinx() ax2 = ax1.twinx()
# Pak de weerdata die bij de voorspelling hoort
weer_toekomst = werk_df.loc[te_voorspellen_tijden] weer_toekomst = werk_df.loc[te_voorspellen_tijden]
# Plot Temperatuur op de rechter-as (ax2) # Plot Temperatuur op de rechter-as (ax2)
@@ -248,8 +248,8 @@ try:
weer_toekomst.index, weer_toekomst.index,
weer_toekomst['temperatuur'], weer_toekomst['temperatuur'],
color='red', color='red',
marker='.', # <-- AANPASSING marker='.',
linestyle='--', # <-- AANPASSING linestyle='--',
label='Temperatuur (°C)' label='Temperatuur (°C)'
) )
# Plot Windsnelheid op de rechter-as (ax2) # Plot Windsnelheid op de rechter-as (ax2)
@@ -257,8 +257,8 @@ try:
weer_toekomst.index, weer_toekomst.index,
weer_toekomst['wind_snelheid'], weer_toekomst['wind_snelheid'],
color='green', color='green',
marker='x', # <-- AANPASSING marker='x',
linestyle=':', # <-- AANPASSING linestyle=':',
label='Windsnelheid (km/u)' label='Windsnelheid (km/u)'
) )
ax2.set_ylabel('Temperatuur / Windsnelheid', color='black') ax2.set_ylabel('Temperatuur / Windsnelheid', color='black')
@@ -266,12 +266,25 @@ try:
# Titel en gecombineerde legenda # Titel en gecombineerde legenda
plt.title(f'Energieprijs & Weer Voorspelling ({len(resultaat_df)} uur)', fontsize=16) 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() lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1 + lines2, labels1 + labels2, loc='upper left') 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 # Sla de grafiek op
plt.savefig(GRAFIEK_BESTAND) plt.savefig(GRAFIEK_BESTAND)
plt.close(fig) # Geheugen vrijgeven plt.close(fig) # Geheugen vrijgeven
@@ -282,7 +295,7 @@ try:
except Exception as e: except Exception as e:
print(f"❌ Fout bij genereren van grafiek: {e}") print(f"❌ Fout bij genereren van grafiek: {e}")
# --- EINDE NIEUWE BLOK --- # --- EINDE BLOK ---
except Error as e: except Error as e:
print(f"❌ Fout met MySQL verbinding: {e}") print(f"❌ Fout met MySQL verbinding: {e}")

View File

@@ -8,6 +8,7 @@ import holidays
# --- NIEUW: Imports voor grafiek en e-mail --- # --- NIEUW: Imports voor grafiek en e-mail ---
import matplotlib.pyplot as plt import matplotlib.pyplot as plt
import matplotlib.dates as mdates
import smtplib import smtplib
from email.mime.multipart import MIMEMultipart from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText from email.mime.text import MIMEText
@@ -143,7 +144,7 @@ def send_email_with_graph(image_path, result_df):
print("\n📬 E-mail opstellen...") print("\n📬 E-mail opstellen...")
msg = MIMEMultipart() 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['From'] = EMAIL_CONFIG['sender']
msg['To'] = EMAIL_CONFIG['receiver'] msg['To'] = EMAIL_CONFIG['receiver']
@@ -224,7 +225,7 @@ try:
print(resultaat_df) print(resultaat_df)
print("="*70) 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)...") print("\n📊 Grafiek genereren (met temperatuur en wind)...")
try: try:
# Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs # Maak de basis-figuur en de EERSTE Y-as (ax1) voor de prijs
@@ -235,19 +236,18 @@ try:
resultaat_df.index, resultaat_df.index,
resultaat_df['Voorspelde_Prijs'], resultaat_df['Voorspelde_Prijs'],
color='blue', color='blue',
marker='.', # <-- AANPASSING marker='.',
linestyle='-', # <-- AANPASSING linestyle='-',
label='Voorspelde Prijs' label='Voorspelde Prijs'
) )
ax1.set_ylabel('Voorspelde Prijs (€)', color='blue') ax1.set_ylabel('Voorspelde Prijs (€)', color='blue')
ax1.tick_params(axis='y', labelcolor='blue') ax1.tick_params(axis='y', labelcolor='blue')
ax1.set_xlabel('Datum en Tijd') 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 # Maak de TWEEDE Y-as (ax2) die de X-as deelt
ax2 = ax1.twinx() ax2 = ax1.twinx()
# Pak de weerdata die bij de voorspelling hoort
weer_toekomst = werk_df.loc[te_voorspellen_tijden] weer_toekomst = werk_df.loc[te_voorspellen_tijden]
# Plot Temperatuur op de rechter-as (ax2) # Plot Temperatuur op de rechter-as (ax2)
@@ -255,8 +255,8 @@ try:
weer_toekomst.index, weer_toekomst.index,
weer_toekomst['temperatuur'], weer_toekomst['temperatuur'],
color='red', color='red',
marker='.', # <-- AANPASSING marker='.',
linestyle='--', # <-- AANPASSING linestyle='--',
label='Temperatuur (°C)' label='Temperatuur (°C)'
) )
# Plot Windsnelheid op de rechter-as (ax2) # Plot Windsnelheid op de rechter-as (ax2)
@@ -264,8 +264,8 @@ try:
weer_toekomst.index, weer_toekomst.index,
weer_toekomst['wind_snelheid'], weer_toekomst['wind_snelheid'],
color='green', color='green',
marker='x', # <-- AANPASSING marker='x',
linestyle=':', # <-- AANPASSING linestyle=':',
label='Windsnelheid (km/u)' label='Windsnelheid (km/u)'
) )
ax2.set_ylabel('Temperatuur / Windsnelheid', color='black') ax2.set_ylabel('Temperatuur / Windsnelheid', color='black')
@@ -273,12 +273,25 @@ try:
# Titel en gecombineerde legenda # Titel en gecombineerde legenda
plt.title(f'Energieprijs & Weer Voorspelling ({len(resultaat_df)} uur)', fontsize=16) 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() lines1, labels1 = ax1.get_legend_handles_labels()
lines2, labels2 = ax2.get_legend_handles_labels() lines2, labels2 = ax2.get_legend_handles_labels()
ax2.legend(lines1 + lines2, labels1 + labels2, loc='upper left') 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 # Sla de grafiek op
plt.savefig(GRAFIEK_BESTAND) plt.savefig(GRAFIEK_BESTAND)
plt.close(fig) # Geheugen vrijgeven plt.close(fig) # Geheugen vrijgeven
@@ -289,7 +302,7 @@ try:
except Exception as e: except Exception as e:
print(f"❌ Fout bij genereren van grafiek: {e}") print(f"❌ Fout bij genereren van grafiek: {e}")
# --- EINDE NIEUWE BLOK --- # --- EINDE BLOK ---
except Error as e: except Error as e:
print(f"❌ Fout met MySQL verbinding: {e}") print(f"❌ Fout met MySQL verbinding: {e}")