Как построить несколько графиков Season_decompose на одном рисунке?

Я разлагаю несколько временных рядов, используя разложение по сезонности, предлагаемое statsmodels. Вот код и соответствующий вывод:

def seasonal_decompose(item_index):
    tmp = df2.loc[df2.item_id_copy == item_ids[item_index], "sales_quantity"]
    res = sm.tsa.seasonal_decompose(tmp)
    res.plot()
    plt.show()

seasonal_decompose(100)

введите описание изображения здесь

Может кто-нибудь, пожалуйста, скажите мне, как я могу построить несколько таких графиков в формате столбца строки X, чтобы увидеть, как ведут себя несколько временных рядов?


person user1274878    schedule 19.07.2017    source источник


Ответы (2)


sm.tsa.seasonal_decompose возвращает DecomposeResult. У этого есть атрибуты observed, trend, seasonal и resid, которые являются сериями панд. Вы можете построить каждый из них, используя функциональность графика панд. Например.

res = sm.tsa.seasonal_decompose(someseries)
res.trend.plot()

По сути, это то же самое, что и функция res.plot() для каждой из четырех серий, поэтому вы можете написать свою собственную функцию, которая принимает DecomposeResult и список из четырех осей matplotlib в качестве входных данных и отображает четыре атрибута по четырем осям.

import matplotlib.pyplot as plt
import statsmodels.api as sm

dta = sm.datasets.co2.load_pandas().data
dta.co2.interpolate(inplace=True)
res = sm.tsa.seasonal_decompose(dta.co2)

def plotseasonal(res, axes ):
    res.observed.plot(ax=axes[0], legend=False)
    axes[0].set_ylabel('Observed')
    res.trend.plot(ax=axes[1], legend=False)
    axes[1].set_ylabel('Trend')
    res.seasonal.plot(ax=axes[2], legend=False)
    axes[2].set_ylabel('Seasonal')
    res.resid.plot(ax=axes[3], legend=False)
    axes[3].set_ylabel('Residual')


dta = sm.datasets.co2.load_pandas().data
dta.co2.interpolate(inplace=True)
res = sm.tsa.seasonal_decompose(dta.co2)

fig, axes = plt.subplots(ncols=3, nrows=4, sharex=True, figsize=(12,5))

plotseasonal(res, axes[:,0])
plotseasonal(res, axes[:,1])
plotseasonal(res, axes[:,2])

plt.tight_layout()
plt.show()

введите описание изображения здесь

person ImportanceOfBeingErnest    schedule 19.07.2017

import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [1, 4, 9, 16, 25]
fig = plt.figure()
ax1 = fig.add_subplot(2,3,1)
ax1.scatter(x, y)
ax2 = fig.add_subplot(2,3,2)
ax2.scatter(x, y)
ax3 = fig.add_subplot(2,3,3)
ax3.scatter(x, y)
ax4 = fig.add_subplot(2,3,4)
ax4.scatter(x, y)
ax5 = fig.add_subplot(2,3,5)
ax5.scatter(x, y)
ax6 = fig.add_subplot(2,3,6)
ax6.scatter(x, y)
plt.show()

введите здесь описание изображения

person Joe    schedule 19.07.2017