【问题标题】:pandas subplots in a loop循环中的熊猫子图
【发布时间】:2015-02-11 07:55:28
【问题描述】:

我有这段代码,它可以很好地在 1 行和 6 列中绘制我的图 我尝试将其绘制为 2x3 或 3x2,但未成功 我在 pandas 的 .plot() 实现中遗漏了什么?

fig, axes = plt.subplots(nrows=1, ncols=6)
spfvL = [6, 11, 22, 33, 44, 55]
for j, i in enumerate(spfvL):
    df['spfv' + str(i)] = pd.rolling_std(df['r VIX'], i)*np.sqrt(252)
    res = smf.ols(formula='spfv'+ str(i)+' ~ Q(\'VIX Index\')', data=df).fit()
    df['pred'+ str(i)] = better_predict(res, df)
    df.loc[:,['pred' + str(i), 'spfv' + str(i)]].plot(ax=axes[j])

编辑:为了获得 2x3,我在下面尝试过,变化不大。

axes 具有 (2,3) 形状,我无法将正确的参数传递到最后一行 ax=axes。 理想情况下,我应该有类似 ax = axes[x][y] 的东西,其中 (x,y) 在 [(0,0), (0,1), (0,2), (1,0), (1 ,1), (1,2)] 因此具有精确的轴形状,但我只能通过枚举来获取“索引”列表...

fig, axes = plt.subplots(nrows=2, ncols=3)
spfvL = [6, 11, 22, 33, 44, 55]
for j, i in enumerate(spfvL):
    df['spfv' + str(i)] = pd.rolling_std(df['r VIX'], i)*np.sqrt(252)
    res = smf.ols(formula='spfv'+ str(i)+' ~ Q(\'VIX Index\')', data=df).fit()
    df['pred'+ str(i)] = better_predict(res, df)
    df.loc[:,['pred' + str(i), 'spfv' + str(i)]].plot(ax=axes[j])

【问题讨论】:

  • edit您的帖子并在您尝试绘制 2x3/3x2 的位置添加代码。

标签: python matplotlib pandas plot st


【解决方案1】:

或者,您可以在循环内添加子图:

fig = plt.figure(figsize=(15, 10))
for j, i in enumerate(spfvL):
    fig.add_subplot(2, 3, i+1)
    df.loc[:, ['pred' + str(i), 'spfv' + str(i)]].plot(ax=axes.flat[j])

【讨论】:

    【解决方案2】:

    同样你也可以这样做:

    for i, ax in enumerate(axes.reshape(-1)):
         df[spfvL[i]].plot(ax=ax)
    

    【讨论】:

      【解决方案3】:

      axes 是一个 ndarray 我需要一种通过索引访问它的方法,幸运的是 flat 方法可以做到这一点。

      fig, axes = plt.subplots(nrows=2, ncols=3)
      spfvL = [6, 11, 22, 33, 44, 55]
      for j, i in enumerate(spfvL):
          df['spfv' + str(i)] = pd.rolling_std(df['r VIX'], i) * np.sqrt(252)
          res = smf.ols(formula='spfv'+ str(i)+' ~ Q(\'VIX Index\')', data=df).fit()
          df['pred'+ str(i)] = better_predict(res, df)
          df.loc[:, ['pred' + str(i), 'spfv' + str(i)]].plot(ax=axes.flat[j])
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        • 2018-12-11
        • 2021-06-30
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-08-20
        相关资源
        最近更新 更多