Мне хотелось бы построить время из серии datetime64, где ось Y отформатирована как «% H:% M, показывая только 00:00, 01:00, 02:00 и т. Д.Как построить время по оси Y в формате «% H:% M» в matplotlib?
это это то, что выглядит сюжет без настройки форматирования оси y.
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
from matplotlib.dates import DateFormatter
from matplotlib.dates import HourLocator
df = pd.DataFrame(data=dict(a=pd.date_range('1/1/2011',periods=1440000,freq='1min')))
df = df.iloc[np.arange(0,1440*100,1440)+np.random.randint(1,300,100)]
plt.plot(df.index,df['a'].dt.time)
plt.show()
После прочтения вокруг на тему на SO, я попытался следующий, но без успеха.
ax = plt.subplot()
ax.yaxis.set_major_locator(HourLocator())
ax.yaxis.set_major_formatter(DateFormatter('%H:%M'))
plt.plot(df.index,df['a'].dt.time)
plt.show()
ValueError: DateFormatter found a value of x=0, which is an illegal date. This usually occurs because you have not informed the axis that it is plotting dates, e.g., with ax.xaxis_date()
Может ли кто-нибудь мне посоветовать?
Импорт панд неявно устанавливает конвертеры для правильной работы с datetime64 (путем отмывания их через пакетный тип данных pandas dt64). – tacaswell
спасибо @tcaswell, но pandas (0.17.0) был импортирован в моем примере выше. любые предложения о том, почему он не работает? – themachinist
@tcaswell Не уверен, что вы имеете в виду, мне пришлось добавить вызов '.tolist()', чтобы сделать работу HourLocator. Я заметил, что при построении «.df.time» matplotlib использовали материал панд для тиков и меток, но я не нашел простой способ настроить их для удовлетворения требований. – Goyo