Как построить данные, связанные со временем, когда данные времени были установлены в качестве индекса? - PullRequest
0 голосов
/ 27 февраля 2019

После расчета данных времени в качестве индекса по dft = dft.set_index('c_time') Затем я повторяю выборку данных по месяцам по dftm = dft.resample('M').sum().to_period('M'), и данные выглядят так:

print(dftm['topic0'].head())
c_time
2012-03    0.0
2012-04    1.0
2012-05    0.0
2012-06    0.0
2012-07    0.0
Freq: M, Name: topic0, dtype: float64

как установить данные о времени повторной выборки (например, месяц) как ось х?Я не смог сделать это следующим образом:

x = dftq.index
y1 = dftq['topic0']
# Plot Line1 (Left Y Axis)
fig, ax1 = plt.subplots(1,1,figsize=(16,9), dpi= 80)
ax1.plot(x, y1, color='tab:red')




ValueError: view limit minimum 0.0 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 голосов
/ 27 февраля 2019

Я думаю, что это должен быть один из случаев для функции date2num в matplotlib:

from matplotlib.dates import date2num
x = date2num(dftq.index)

Однако вы просто попробовали

dftq.topic0.plot()

?


РЕДАКТИРОВАТЬ: (для вопроса: как построить график, выбрав определенный интервал времени?)

Вы можете сделать это либо ужеиндексирование данных, которые будут нанесены на график, с помощью .loc

dftm.loc['2012-04':'2012-06'].plot()

# or

dftm.topic0.loc['2012-04':'2012-06'].plot()

или путем корректировки пределов осей всего графика впоследствии:

ax = dftm.plot()
ax.set_xlim('2012-04', '2012-06')

# or

import matplotlib.pyplot as plt
dftm.plot()
plt.xlim('2012-04', '2012-06')

дополнительная: (относительно построения с использованием matplotlib api и date2num)

Первое предложение через matplotlib и его date2num также будет работать, если временной индекс не изменяется свведите datetime to period.
Но все же: чтобы не иметь целых чисел на отметках оси x, а были бы красиво отформатированные даты, вам нужно будет добавить что-то вроде

from matplotlib.dates import DateFormatter
xfmt = DateFormatter('%Y-%m')
ax1.xaxis.set_major_formatter(xfmt)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...