2017-06-19 61 views
0

我的問題非常簡單。我有這個函數爲數據框中的每一列創建一個特定的圖形。然而,輸出是7個獨立的圖。我可以做一個4×2的次要情節是這樣的:使用for循環添加到子圖形中

f, axarr = plt.subplots(4, 2, figsize = (10, 10)) 

得到this empty chart

這裏是我的陰謀代碼。我怎麼能/應該讓它填充在這個小區裏,而不是返回7個獨立的地塊?包括數據幀的頭部作參考

for index in weights.columns:  
    fig = plt.figure(figsize = (10, 6)) 
    ax = fig.add_subplot(1, 1, 1) 
    ##this gets the bottom axis to be in the middle so you can see 
    ##clearly positive or negative returns 
    ax.spines['left'].set_position(('data', 0.0)) 
    ax.spines['bottom'].set_position(('data', 0.0)) 

    ax.spines['right'].set_color('none') 
    ax.spines['top'].set_color('none') 

    ax.set_ylabel('{} One month forward return'.format(index)) 
    ax.set_xlabel('Percent of Max Exposure') 

    ##get the ticks in percentage format 

    ax.yaxis.set_major_formatter(FuncFormatter(lambda y, _: '{:.0%}'.format(y))) 
    ax.xaxis.set_major_formatter(FuncFormatter(lambda x, _: '{:.0%}'.format(x))) 

    plt.title('One Month Forward {} Returns Versus Total Exposure'.format(index)) 
    plt.scatter(weights_scaled[index], forward_returns[index], marker = 'o') 

weights_scaled.head()

缺貨[415]: US股票開發防爆U.S。 BMI新興BMI美國房地產
日期
1999-12-31 0.926819 0.882021 0.298016 0.0
2000-01-31 0.463410 0.882021 0.298016 1.0
2000-02-29 0.463410 0.882021 0.298016 0.5
2000年3月31日0.926819 0.882021 0.298016 1.0
2000年4月28日0.926819 0.441010 0.000000 1.0

 Commodity Gold US Bonds 

日期
1999-12-31 1.0 1.0 0.051282
2000-01-31 1.0 1.0 0.232785
2000-02-29 1.0 1.0 0.258426
2000年3月31日1.0 0.5 0.025641
2000年4月28日1.0 0.5 0.244795

+0

等待,所以你只是希望自己的數據所有數據都在一個數字上而不是一個數字上?如果是這樣的話,你可能要考慮從循環中創建一個新的數字...... –

回答

1

這段代碼是造成問題:

for index in weights.columns:  
    fig = plt.figure(figsize = (10, 6)) 
    ax = fig.add_subplot(1, 1, 1) 

對於每一列,它都會在該圖上創建一個新圖形和一個新軸。相反,你應該返回到你的第一個本能與axarr,然後當你迭代你的數據框中的列時,將該數組的一個軸分配給一個變量,在該變量上繪製該列中的數據。

一個虛擬的例子看起來是這樣的:

# Create array of 8 subplots 
f, axarr = plt.subplots(4, 2, figsize=(10,10)) 

# Create dummy data for my example 
new_dict = {c: np.random.randint(low=1, high=10, size=40) for c in ['a','b','c','d','e','f','g']} 

df = pd.DataFrame(new_dict) 

# Enumerate columns, providing index and column name 
for i, col in enumerate(df.columns): 

    # Select subplot from list generated earlier 
    ax = axarr.flat[i] 

    # Select column and plot data on subplot axis 
    df[col].hist(ax=ax) 

Subplots

編輯你的代碼的相關部分,我想你想:

for i, col in enumerate(weights.columns):  

    ax = axarr.flat[i] 

    ax.set_ylabel('{} One month forward return'.format(col)) 

    ... 

    plt.title('One Month Forward {} Returns Versus Total Exposure'.format(col)) 
    plt.scatter(weights_scaled[col], forward_returns[col], marker = 'o') 
相關問題