2014-12-12 1 views
1

У меня есть этот код, который хорошо отображает мои сюжеты в 1 строке и 6 столбцах Я безуспешно пытался построить его в 2x3 или 3x2 Есть ли что-то, что мне не хватает в .plot() внедрение панд? plot 1 by 6pandas subplots in a loop

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

редактировать: чтобы получить 2х3 я пытался что ниже, не так много изменений.

оси имеют форму (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]) 
+0

Пожалуйста [править] Ваш пост и добавить код, в котором вы пытались построить 2x3/3x2. – MattDMo

ответ

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

Точно так же вы можете сделать:

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