Исправление сообщения об ошибке при использовании индекса даты в графике matplotlib - PullRequest
0 голосов
/ 27 апреля 2020

У меня есть данные временных рядов, которые я хочу представить на графике. Я импортирую данные, преобразую фрейм данных из широкого в длинный формат, создаю переменную даты и изменяю индекс на эту переменную даты. Когда я конвертирую индекс датафрейма в дату и пытаюсь построить график с помощью matplotlib, я получаю сообщение «У Axis должна быть задана частота для преобразования в Периоды».

Как это исправить? Здесь приведены шаги с кодом и снимками экрана с фреймом данных:

pd.options.display.float_format = '{:,.1f}'.format 
import calendar
from datetime import datetime

df2=df1.pivot_table(index='date', columns='code', values='measure').reset_index()
df2['year'] = pd.DatetimeIndex(df2['date']).year
df2['month'] = pd.DatetimeIndex(df2['date']).month
df2['month_year'] = pd.to_datetime(df2['date']).dt.to_period('M')
df2['month_name'] = df2['month'].apply(lambda x: calendar.month_abbr[x])

df2.reset_index(drop=True, inplace=True)
df2.tail(5)

df2=df2.set_index('date')  
df2

enter image description here

А вот мой код для генерации графика:

import matplotlib.pyplot as plt
import matplotlib as mpl
import datetime as dt

plt.style.use('seaborn-whitegrid')

title='Banana Metrics: History & Forecast'
prod=df2['banana_ADV']
start_date='2015-01-01'
end_date='2015-12-01'
start_date_of_shading='2015-09-01'
end_date_of_shading='2015-12-01'

fig = plt.figure(figsize=(15,7))

style = dict(size=10, color='black')

fig.suptitle(title,fontsize=20)

ax1 = fig.add_subplot(111)                                                          
ax1.set_title('Banana Daily Sales Volume')                                                         
ax1.plot(df2.loc[start_date:end_date],prod,color='green',linewidth=3.0)            
ax1.yaxis.set_major_formatter(mpl.ticker.StrMethodFormatter('{x:,.0f}'))           
ax1.grid(color='gray', linestyle='--', linewidth=0.2)                              
ax1.axvspan(start_date_of_shading,end_date_of_shading, alpha=0.2, color='gray')   
ax1.set_xlim([start_date,end_date])
plt.show()

Поскольку я изменил поле даты со строки на формат даты и сделал его новым индексом, я получаю сообщение об ошибке:

'Для оси необходимо установить freq для преобразования в Периоды. '.

Как мне это исправить?

Это ожидаемый результат (я изменил приведенный выше код, сделав в качестве строки' date ', вместо того, чтобы сделать' date 'индексом и ссылаясь соответственно):

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...