熊猫在循环中的子图

时间:2014-12-12 15:06:17

标签: python matplotlib pandas plot st

我有这个代码可以很好地绘制我的1行和6列图 我尝试用2x3或3x2绘制它是不成功的 在pandas的.plot()实现中是否存在我缺少的东西? plot 1 by 6

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我尝试了以下内容,而不是更改。

轴具有(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])

3 个答案:

答案 0 :(得分:2)

轴是一个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])

答案 1 :(得分:2)

同样你也可以这样做:

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

答案 2 :(得分:0)

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

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