У меня следующая проблема: у меня есть фрейм данных с индексом даты и времени и столбцами, которые содержат значения с плавающей запятой или логические значения, например:
TAG_2552 TAG_2526
timestamp
2018-06-17 14:41:48 50.0 True
2018-06-17 14:41:49 51.0 True
2018-06-17 14:41:50 52.0 True
2018-06-17 14:41:51 49.0 True
2018-06-17 14:41:52 55.0 False
2018-06-17 14:41:53 50.0 False
2018-06-17 14:41:54 48.0 False
2018-06-17 14:41:55 54.0 False
2018-06-17 14:41:56 53.0 True
2018-06-17 14:41:57 50.0 True
Я хотел бы построить это, что не является проблемой для значений с плавающей запятой. Для логических значений я хотел бы рисовать прямоугольники, когда они True
. Я попытался использовать matplotlib.collections для этого.
Я пытался
df['datetime']=df.index
collection = collections.BrokenBarHCollection.span_where(df['datetime'].dt.date, ymin=0, ymax=1, where=df['TAG_2526']==True, facecolor='green', alpha=.5)
(и другие варианты), но это не сработало.
Можно создать коллекцию, используя
df['timedelta'] = df['datetime']-df['datetime'][0]
collection2 = collections.BrokenBarHCollection.span_where(myProc9['timedelta'].astype('timedelta64[ns]')/np.timedelta64(1,'s'), ymin=0, ymax=1, where=myProc9['TAG_2503']==True, facecolor='green', alpha=.5)
Но так как я хотел бы провести сравнение с исходной датой-временем, потому что я хотел бы разделить ось X, то единственный вариант, который я могу видеть, - это построить все относительно myProc9['timedelta'].astype('timedelta64[ns]')/np.timedelta64(1,'s')
и перемаркировать ось X.
Я проверил разные страницы об изменении формата datetime, но matplotlib.collections
, похоже, ничего не берет, обычное сообщение об ошибке
TypeError: float() argument must be a string or a number, not 'datetime.date'
(или что-то еще, что я пробовал, для различных преобразований между форматами даты и времени см. Здесь: Преобразование между датой и временем, меткой времени и датой и временем64 )
Мне было интересно, есть ли лучший способ сделать это (не использовать matplotlib.collections
) или другой способ назвать это?