Matplotlib Flächen einfärben und DateTime/Timezone

mit matplotlib, NumPy, pandas, SciPy, SymPy und weiteren mathematischen Programmbibliotheken.
Antworten
fresh
User
Beiträge: 1
Registriert: Donnerstag 6. Mai 2021, 19:07

Hallo zusammen,
ich kämpfe jetzt schon lange mit folgendem Problem:

Ich habe eine Time-Series mit zwei Werten und zusätzlich zwei vertikale Linien. Ich möchte die Fläche dazwischen einfärben. Jedoch verschiebt es mir die grüne Fläche scheinbar genau um den Wert der Zeitzone (Europe/Berlin). Inzwischen habe ich echt schon viele verschiedenen Konstellationen versucht, komme aber einfach nicht auf die Lösung. (Wenn man es mit einem Zufallsdatensatz, also eben ohne Zeitzone probiert, klappt es perfekt, weshalb ich denke, dass das Problem dort liegen muss...

Code: Alles auswählen

from datetime import datetime

start_date = "2019-06-18"
end_date = "2019-06-19"

x0 = '2019-06-18 9:00:00'
x1 = '2019-06-18 17:00:00'


x0 = pd.to_datetime(x0, format="%Y-%m-%d", utc=True)
x1 = pd.to_datetime(x1, format="%Y-%m-%d", utc=True)

#x1 = x1.dt.tz_convert('Europe/Berlin')
#x0 = x0.dt.tz_convert('Europe/Berlin')
#x0 = int(x0.strftime('%Y%m%d'))
#x1 = int(x1.strftime('%Y%m%d'))
#x0 = datetime.fromtimestamp(x0)
#x1 = datetime.fromtimestamp(x1)



zeit = df.loc[(df['DateTime'] > start_date) & (df['DateTime'] <= end_date)]

ax = zeit.plot(figsize=(15, 10), x="DateTime", y=["FromGen", "ToCons"])

ax.set_xlabel("Zeit")
ax.set_ylabel("Wh")
legend = ax.legend(title="comp",
                   loc='upper right', fontsize='large', fancybox=True, labels=['FromGen', 'ToCons'])
ax.axvline(x=x0, color='red')
ax.axvline(x=x1, color='red')

ax.fill_between(zeit['DateTime'].values, zeit['FromGen'], zeit['ToCons'],
                where=(zeit['FromGen'] > zeit['ToCons']) & ((zeit['DateTime'] <= x0) | (zeit['DateTime'] >= x1)),
                interpolate=False, color='#8FF536')
plt.show()

Bild


Vielen Dank schon mal für alle Tipps :)
tonikae
User
Beiträge: 90
Registriert: Sonntag 23. Februar 2020, 10:27

Könnte an der Sommerzeit liegen.Das übersieht man
schon mal gerne.
Hatte bei einem Scheduler mal ein ähnliches Problem.
Der Scheduler nutzte die UTC-Zeit, die sich von der
deutschen Lokalzeit um 1Stunde(während der Sommerzeit
um 2 Stunden) unterschied.
Antworten