【问题标题】:How to plot multiple seasonal_decompose plots in one figure?如何在一个图中绘制多个季节性分解图?
【发布时间】:2017-12-24 08:11:28
【问题描述】:

我正在使用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 列的格式绘制多个这样的图,以查看多个时间序列的行为?

【问题讨论】:

    标签: python matplotlib statsmodels


    【解决方案1】:

    sm.tsa.seasonal_decompose 返回一个DecomposeResult。这有属性observedtrendseasonalresid,它们是pandas系列。您可以使用 pandas 绘图功能绘制它们中的每一个。例如。

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

    【讨论】:

      【解决方案2】:
      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()
      

      【讨论】:

        猜你喜欢
        • 2021-09-30
        • 2021-02-26
        • 1970-01-01
        • 2019-10-31
        • 1970-01-01
        • 2021-03-03
        • 2021-02-22
        • 2016-07-01
        • 1970-01-01
        相关资源
        最近更新 更多