如何在一个图中绘制多个season_decompose图?

时间:2017-07-19 07:43:47

标签: python matplotlib 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) 提供的季节性分解来分解多个时间序列。这是代码和相应的输出:

public void onClickDiscover(View view){
if(mNsdUtils != null)                  //add this line
mNsdUtils.discoverServices();
  }

enter image description here

有人可以告诉我如何在行X列格式中绘制多个这样的图,看看多个时间序列的行为如何?

2 个答案:

答案 0 :(得分:5)

sm.tsa.seasonal_decompose返回DecomposeResult。这包含属性observedtrendseasonalresid,这些是pandas系列。您可以使用pandas plot功能绘制每个图。例如。

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

enter image description here

答案 1 :(得分:0)

SELECT DISTINCT 
    pcc.[ID],
    pcd1.Code as Code1, pcd1.EffDate as EffDate1, 
    pcd1.CancelDate as CancelDate1, pcd1.ReasonCode as ReasonCode1,
    pcd2.Code as Code2, pcd2.EffDate as EffDate2,
    pcd2.CancelDate as CancelDate2, pcd2.ReasonCode as ReasonCode2,
    pcd3.Code as Code3, pcd3.EffDate as EffDate3,
    pcd3.CancelDate as CancelDate3, pcd3.ReasonCode as ReasonCode3,
    pcd4.Code as Code4, pcd4.EffDate as EffDate4,
    pcd4.CancelDate as CancelDate4, pcd4.ReasonCode as ReasonCode4,
    pcd5.Code as Code5, pcd5.EffDate as EffDate5,
    pcd5.CancelDate as CancelDate5, pcd5.ReasonCode as ReasonCode5,
    pcd6.Code as Code6, pcd6.EffDate as EffDate6,
    pcd6.CancelDate as CancelDate6, pcd6.ReasonCode as ReasonCode6,
   pcd7.Code as Code7,pcd7.EffDate as EffDate7,pcd7.CancelDate as CancelDate7,pcd7.ReasonCode as ReasonCode7,
   pcd8.Code as Code8,pcd8.EffDate as EffDate8,pcd8.CancelDate as CancelDate8,pcd8.ReasonCode as ReasonCode8,
   pcd9.Code as Code9,pcd9.EffDate as EffDate9,pcd9.CancelDate as CancelDate9,pcd9.ReasonCode as ReasonCode9,
   pcd10.Code as Code10,pcd10.EffDate as EffDate10,pcd10.CancelDate as CancelDate10,pcd10.ReasonCode as ReasonCode10,
   pcd11.Code as Code11,pcd11.EffDate as EffDate11,pcd11.CancelDate as CancelDate11,pcd11.ReasonCode as ReasonCode11,
   pcd12.Code as Code12,pcd12.EffDate as EffDate12,pcd12.CancelDate as CancelDate12,pcd12.ReasonCode as ReasonCode12,
   pcd13.Code as Code13,pcd13.EffDate as EffDate13,pcd13.CancelDate as CancelDate13,pcd13.ReasonCode as ReasonCode13,
   pcd14.Code as Code14,pcd14.EffDate as EffDate14,pcd14.CancelDate as CancelDate14,pcd14.ReasonCode as ReasonCode14,
   pcd15.Code as Code15,pcd15.EffDate as EffDate15,pcd15.CancelDate as CancelDate15,pcd15.ReasonCode as ReasonCode15,''
   FROM #CompCodes pcc
   LEFT OUTER JOIN ProvCompDetails pcd1 ON pcc.ProviderID=pcd1.ProviderID AND pcd1.ColumnNumber=1
   LEFT OUTER JOIN ProvCompDetails pcd2 ON pcc.ProviderID=pcd2.ProviderID AND pcd2.ColumnNumber=2
   LEFT OUTER JOIN ProvCompDetails pcd3 ON pcc.ProviderID=pcd3.ProviderID AND pcd3.ColumnNumber=3
   LEFT OUTER JOIN ProvCompDetails pcd4 ON pcc.ProviderID=pcd4.ProviderID AND pcd4.ColumnNumber=4
   LEFT OUTER JOIN ProvCompDetails pcd5 ON pcc.ProviderID=pcd5.ProviderID AND pcd5.ColumnNumber=5
   LEFT OUTER JOIN ProvCompDetails pcd6 ON pcc.ProviderID=pcd6.ProviderID AND pcd6.ColumnNumber=6
   LEFT OUTER JOIN ProvCompDetails pcd7 ON pcc.ProviderID=pcd7.ProviderID AND pcd7.ColumnNumber=7
   LEFT OUTER JOIN ProvCompDetails pcd8 ON pcc.ProviderID=pcd8.ProviderID AND pcd8.ColumnNumber=8
   LEFT OUTER JOIN ProvCompDetails pcd9 ON pcc.ProviderID=pcd9.ProviderID AND pcd9.ColumnNumber=9
   LEFT OUTER JOIN ProvCompDetails pcd10 ON pcc.ProviderID=pcd10.ProviderID AND pcd10.ColumnNumber=10
   LEFT OUTER JOIN ProvCompDetails pcd11 ON pcc.ProviderID=pcd11.ProviderID AND pcd11.ColumnNumber=11
   LEFT OUTER JOIN ProvCompDetails pcd12 ON pcc.ProviderID=pcd12.ProviderID AND pcd12.ColumnNumber=12
   LEFT OUTER JOIN ProvCompDetails pcd13 ON pcc.ProviderID=pcd13.ProviderID AND pcd13.ColumnNumber=13
   LEFT OUTER JOIN ProvCompDetails pcd14 ON pcc.ProviderID=pcd14.ProviderID AND pcd14.ColumnNumber=14
   LEFT OUTER JOIN ProvCompDetails pcd15 ON pcc.ProviderID=pcd15.ProviderID AND pcd15.ColumnNumber=15
   Order by pcc.ID

enter image description here

相关问题