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 ---
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}")

View File

@@ -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}")