Как отображать события с минутной точностью на почасовых графиках с помощью matplotlib? - PullRequest
0 голосов
/ 24 октября 2018

У меня есть почасовой график, сгенерированный с помощью matplotlib.Мне нужно подготовить событие, например, с 09:00 до 10:45.Когда я пытаюсь это сделать, используя axvspan, я получаю бар с 9:00 до 10:00.Как я могу получить более длинный?

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import datetime as dt
import pandas as pd

now_date = dt.datetime(2018,10,1,9)
d_tw_ini = now_date - dt.timedelta(hours = 1)
d_tw_fin = now_date + dt.timedelta(hours = 3)

dts = pd.date_range(start=d_tw_ini, end=d_tw_fin, freq='1H', name='ini', closed='left')
data=pd.DataFrame({'val':[0.5,0.4,0.7,0.9]})

ev1=[dt.datetime(2018,10,1,9,5),dt.datetime(2018,10,1,10,50)]

data['t']=dts.values
data.set_index('t',inplace=True)

fig = plt.figure()
gs = GridSpec(1, 1)
ax_1 = fig.add_subplot(gs[0, 0])

data.plot(ax=ax_1, y='val')
ax_1.axvspan(ev1[0],ev1[1], alpha=0.3, color= 'red')

Результат

1 Ответ

0 голосов
/ 30 октября 2018

Хуан, это выглядит, когда вы использовали панд для построения , почасовая индексация, кажется, вызывает проблемы с тем, как axvspan отображается.

Я заменил

data.plot(ax=ax_1, y='val')

с

ax_1.plot(data.index, data['val'])

, который генерирует изображение ниже, но, к сожалению, вы теряете автоматическое форматирование по оси X.

enter image description here

Добавление двух строк ниже приведет к тому же форматированию даты, что и в вашем примере.

ax_1.set_xticks([x for x in data.index])
ax_1.set_xticklabels([str(x)[11:16] for x in data.index])

enter image description here

Ниже приведен полный код для создания вышеуказанного графика.

import matplotlib.pyplot as plt
from matplotlib.gridspec import GridSpec
import datetime as dt
import pandas as pd

now_date = dt.datetime(2018,10,1,9)
d_tw_ini = now_date - dt.timedelta(hours = 1)
d_tw_fin = now_date + dt.timedelta(hours = 3)

dts = pd.date_range(start=d_tw_ini, end=d_tw_fin, freq='1h', name='ini', 
closed='left')
data=pd.DataFrame({'val':[0.5,0.4,0.7,0.9]})

ev1=[dt.datetime(2018,10,1,9,5,0),dt.datetime(2018,10,1,10,50,0)]

data['t']=dts.values
data.set_index('t',inplace=True)

fig = plt.figure()
gs = GridSpec(1, 1)
ax_1 = fig.add_subplot(gs[0, 0])

# modified section below
ax_1.plot(data.index, data['val'])
ax_1.axvspan(ev1[0],ev1[1], alpha=0.3, color= 'red')

ax_1.set_xticks([x for x in data.index])
ax_1.set_xticklabels([str(x)[11:16] for x in data.index])

plt.show()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...