graph update, title, date, time
This commit is contained in:
@@ -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}")
|
||||
|
||||
Reference in New Issue
Block a user