Проблема X тикеров при построении графиков против времени в matplotlib - PullRequest
1 голос
/ 02 октября 2019

Я пытаюсь написать функцию определения для построения линейного графика по данным импортированного CSV-файла.

Это небольшая выборка моих данных (показания температуры за каждую минуту): -

00:01:00.0305040, 35.35985
00:02:00.0438094, 35.48547
00:03:00.0571148, 35.65295
00:04:00.0704203, 35.90417
00:05:00.0837257, 36.23914
.
.
.
.
08:52:07.2370729, 74.92772
08:53:07.2503783, 75.01146
08:54:07.2648837, 75.05333
08:55:07.2781891, 75.0952
08:56:07.2914945, 75.0952

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

Это мой код

df = pd.read_csv(file,names=["time", "temp"])
df["time"]=pd.to_datetime(df["time"])
df=df.set_index('time')
df.index = df.index.map (lambda t: t.strftime('%H:%M'))
print(df)
fig, ax = plt.subplots()
df.plot(ax = ax, color = 'black', linewidth = 0.4, x_compat=True)
ax.set(xlabel='Time (Hour:Minutes)', ylabel='Temperature (Celsius)')
ax.xaxis.set_major_locator(mdates.HourLocator(interval = 1))
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
fig.autofmt_xdate()
return plt.show()

Я попытался пометить тикеры x вручную

plt.xticks(['0:00', '1:00', '2:00', '3:00', '4:00:0', '5:00', '6:00:0', '7:00', '8:00', '9:00', '10:00'])

, и это сработало, но есть ли способ для любого конкретного случая?

1 Ответ

0 голосов
/ 02 октября 2019

Согласно официальной документации

Все функции построения графиков ожидают np.array или np.ma.masked_array в качестве входных данных. Классы, похожие на массивы, такие как объекты данных pandas и np.matrix, могут работать, а могут и не работать, как предполагалось. Лучше всего преобразовать их в объекты np.array перед построением.

Поэтому я немного изменил ваш код (в основном конвертировал pd df в массив numpy).

df = pd.read_csv(file,names=["time", "temp"])
df["time"]=pd.to_datetime(df["time"])
x_axis = np.array(df.time.values)
y_axis = np.array(df.temp.values)
fig, ax = plt.subplots()
ax.plot(x_axis,y_axis)
ax.set(xlabel='Time (Hour:Minutes)', ylabel='Temperature (Celsius)')
ax.xaxis.set_major_locator(mdates.HourLocator())
ax.xaxis.set_major_formatter(mdates.DateFormatter('%H:%M'))
plt.show()

Теперь галочки видны, как показано ниже.

enter image description here

...