Как отформатировать значения даты и времени на вторичной оси Y Matplotlib

Я пытаюсь построить линейный график, наложенный на гистограмму, с помощью matplotlib. Данные построены правильно, однако вторичная ось Y, описывающая прогнозируемое время начала, выводится неправильно. Все значения прогнозируемого времени начала округляются до часа, например. (13:00, 14:00 и т. Д.), Но при построении преобразуются в 11:40, 12:13:20 и т. Д. По оси Y, как показано ниже:

Прогнозируемые данные csv времени начала

График прогнозируемого времени начала и продолжительности события по сравнению с прогнозируемым запуском

Код для создания этого изображения следующий:

en1 = []
en2 =[]

en1 = np.array(fh.loc(axis=0)[0:44])
en2 = np.array(ev.loc(axis=0)[0:44])

fig,ax = plt.subplots(figsize=(10,10))
ax.bar(en1,en2,color='gainsboro')
plt.ylabel('Forecasted Event Length')

plt.xticks(rotation='90')
ax2 = ax.twinx()
mn, mx = ax2.get_ylim()
ax2.set_ylabel('Forecasted Start Time')
color = 'tab:blue'
ax2.tick_params(axis='y')


ax2.plot(fh,start, marker='o')

plt.legend()

Мы будем очень благодарны за любые идеи о том, как правильно построить фактические значения datetime из csv на вторичной оси Y!


person Nathan Rick    schedule 08.08.2019    source источник


Ответы (1)


Вам нужно построить объект оси, используя ax.bar и ax2.plot вместо plt.bar и plt.plot.

Для этого можно использовать форматировщик оси:

from matplotlib.dates import DateFormatter

ax2.yaxis.set_major_locator(md.HourLocator(interval=1))
ax2.yaxis.set_major_formatter(md.DateFormatter('%H:%M'))
person BenT    schedule 08.08.2019
comment
Проблема по-прежнему сохраняется даже после изменения графика на объекте оси. Есть ли способ установить значения ytick на вторичной оси Y? - person Nathan Rick; 08.08.2019
comment
См. Редактирование выше. Вы можете использовать dateformatter, если у вас есть объекты datetime - person BenT; 08.08.2019
comment
Похоже, у меня были проблемы с функцией pd.to_datetime, когда я изначально определял свои переменные. Форматировщик даты работал отлично. Большое тебе спасибо! - person Nathan Rick; 09.08.2019