У меня есть серия pandas,
, и это график:
Я хочу заполнить область под кривой. Проблема в том, что вызов
plt.fill(y)
выводит:
Как видно из других ответов , это потому что нам нужно отправить полигон в функцию, поэтому мы должны добавить точку (0,0). (И (lastPoint, 0), но в этом случае это не обязательно).
Однако предлагаемое решение записывает следующий код:
plt.fill([0]+[*range(0,len(y))], [0]+pd.Series.tolist(y))
Я отказываюсь верить, что это лучшее решение.
Код ужасен, его совсем не легко прочитать, и я теряю информацию (без дат по оси x):
Кроме того, если я вызываю и plot, и fill (чтобы красная линия была сверху), возникает ошибка:
/usr/local/anaconda3/lib/python3.7/site-packages/matplotlib/dates.py in refresh(self)
1446 def refresh(self):
1447 'Refresh internal information based on current limits.'
-> 1448 dmin, dmax = self.viewlim_to_dt()
1449 self._locator = self.get_locator(dmin, dmax)
1450
/usr/local/anaconda3/lib/python3.7/site-packages/matplotlib/dates.py in viewlim_to_dt(self)
1197 'often happens if you pass a non-datetime '
1198 'value to an axis that has datetime units'
-> 1199 .format(vmin))
1200 return num2date(vmin, self.tz), num2date(vmax, self.tz)
1201
ValueError: view limit minimum -36868.15 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
Поэтому я надеялся, что кто-нибудь может помочь мне написать лучший код и решить эту проблему. Я думаю, что matplotlib должен добавить функцию fill_area или аналогичную.
Что вы, ребята, думаете по этому поводу?