У меня есть данные временных рядов, которые я хочу представить на графике. Я импортирую данные, преобразую фрейм данных из широкого в длинный формат, создаю переменную даты и изменяю индекс на эту переменную даты. Когда я конвертирую индекс датафрейма в дату и пытаюсь построить график с помощью 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
А вот мой код для генерации графика:
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 'индексом и ссылаясь соответственно):