Зона затенения на графике с указанием даты и времени на оси XAXPAN, MATPLOTLIB в python - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть 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

Кто-нибудь знает, как это может работать? Заранее спасибо!

1 Ответ

0 голосов
/ 19 апреля 2020

Я понял это следующим образом: к сожалению, я использовал неправильную команду, я должен использовать axvspan вместо axhspan. Сюжет работал с:

ax.axvspan(mdates.date2num(flags), mdates.date2num(flags+pd.Timedelta(minutes=6)), facecolor='0.5', alpha=0.5)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...