У меня есть pd df, примерно 6000 записей в каждом столбце:
datetime value flag date
0 2015-01-01 07:00:00 0.018013 0.0 2015-01-01
1 2015-01-01 07:06:00 0.101957 1.0 2015-01-01
2 2015-01-01 07:12:00 0.141712 1.0 2015-01-01
3 2015-01-01 07:18:00 0.178875 0.0 2015-01-01
4 2015-01-01 07:24:00 0.237765 0.0 2015-01-01
... ... ... ...
Теперь я хочу нанести дату и время на оси x, а также значение на оси y и заштрихуйте область, когда флаг = 0. , но не линия (с axvline это работает), а целые 6 минут до следующего измерения. И я хочу создавать один график в день, поэтому он начинается с l oop.
. Я пробовал что-то вроде этого:
import pandas as pd
import matplotlib.pyplot as plt
for date in df.date.unique():
fig, ax = plt.subplots(nrows=1, ncols=1)
ax.plot('datetime', 'value', data=df[df.date == date])
for flags in df[(df.date == date) & (df.flag == 0.)].datetime:
ax.axhspan(flags, flags+pd.Timedelta(minutes=6), facecolor='0.5', alpha=0.5)
Когда я пытаюсь это сделать, я получить следующую ошибку, даже если flags
, flags+pd.Timedelta(minutes=6)
и записи в df.datetime
имеют тип: pandas._libs.tslibs.timestamps.Timestamp
ValueError: view limit minimum -36835.18135207975 is less than 1 and is an invalid Matplotlib date value. This often happens if you pass a non-datetime value to an axis that has datetime units
Кто-нибудь знает, как это может работать? Заранее спасибо!