graph update, title, date, time
This commit is contained in:
Binary file not shown.
|
Before Width: | Height: | Size: 124 KiB After Width: | Height: | Size: 137 KiB |
@@ -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}")
|
||||||
|
|||||||
@@ -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}")
|
||||||
|
|||||||
Reference in New Issue
Block a user