Matplotlib Flächen einfärben und DateTime/Timezone
Verfasst: Donnerstag 6. Mai 2021, 19:20
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...

Vielen Dank schon mal für alle Tipps
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()
Vielen Dank schon mal für alle Tipps
