2017-07-19 55 views
2
私は、コードを statsmodels .Hereが提供する季節の分解をされて使用して複数の時系列を分解しています

と対応する出力:複数のseasonal_decomposeプロットを1つの図にプロットするにはどうすればよいですか?

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) 

enter image description here

は、誰かが私は複数のそのようなプロットをプロットすることができる方法を教えてくださいすることができ複数の時系列がどのように動作しているかを見るための行Xの列形式? DecomposeResultを返しsm.tsa.seasonal_decompose

答えて

0
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() 

enter image description here

3

。これは属性がobserved,trend,seasonalresidで、パンダシリーズです。パンダプロット機能を使用して、それぞれをプロットすることができます。例えば。

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

これは、基本的に4つのシリーズごとに行うだろうres.plot()関数と同じであるので、あなたはDecomposeResultと、入力として軸matplotlibの4のリストを受け取り、4つの属性をプロットし、独自の関数を書くこと4軸に

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() 

enter image description here

関連する問題