Ошибка: view limit minimum 0.0 is less than 1 and is an invalid Matplotlib date value
Есть DataFrame, строю график
courses_grow_month_index = courses_grow.pivot_table(index='month_start')
courses_grow_month_index.plot(figsize=(16, 8), grid=True)
plt.tight_layout()
всё ок, понимает даты, не ругается

Когда пытаюсь построить несколько графиков, ругается как будто у меня не все данные типа datetime.
import matplotlib.gridspec as gridspec
fig = plt.figure(constrained_layout=True, figsize=(8, 24))
spec = gridspec.GridSpec(ncols=1, nrows=len(courses_grow_month_index.columns), figure=fig)
sn = 0
for i in courses_grow_month_index.columns:
ax = fig.add_subplot(spec[sn, 0])
ax.plot(courses_grow_month_index[i])
plt.xticks(rotation=45)
ax.set_title(i)
ax.grid(True)
ax.set_xlabel("Дата")
ax.set_ylabel("Прирост")
sn+=1
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 шт):
замените:
ax.plot(courses_grow_month_index[i])
на:
ax.plot(courses_grow_month_index.index, courses_grow_month_index[i])
или замените на:
courses_grow_month_index[i].plot(ax=ax)
UPD: если коротко, то функция ax.plot() умеет работать с двумя типами параметров:
- два первых параметра - списки значений по оси
Xи по осиY - передаем только один список значений -
y, тогда значения по осиXподставятся автоматически -0 ... N-1
Из документации
>>> plot(x, y) # plot x and y using default line style and color
>>> plot(x, y, 'bo') # plot x and y using blue circle markers
>>> plot(y) # plot y using x as index array 0..N-1
>>> plot(y, 'r+') # ditto, but with red plusses
Если же использовать метод Pandas - Series.plot(ax=ax), то в качестве значений по оси X будут использоваться значения индекса последовательности Series, а в качестве значений по оси Y - сами значения Series. Кроме того указав параметр ax=ax мы явно указываем в каком subplot мы хоти рисовать.