2017-06-12 84 views
0

我有一個數據框,並將數據框分成三個子集。每個子集有3到4行數據。在將數據幀分成三個子集後,我使用Matplotlib繪製它們。使用Matplotlib繪製Pandas中的數據框的子集

我有的問題是我無法創建一個繪圖使用切片DataFrame繪製每個子圖的情節。例如,在一組中的三個組中,我只繪製了其中一個圖(最後一個子圖),其中沒有其他兩個圖組初始集的數據。它看起來像'r'值不會傳遞給所有三個子圖的'r.plot'。

import pandas as pd 
import matplotlib.pyplot as plt 
import numpy as np 
df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD')) 

df['key1'] = 0 
df.key1.iloc[0:3] = 1 
df.key1.iloc[3:7] = 2 
df.key1.iloc[7:] = 3 

df_grouped = df.groupby('key1') 

for group_name, group_value in df_grouped: 
    rows, columns = group_value.shape 
    fig, axes = plt.subplots(rows, 1, sharex=True, sharey=True, figsize=(15,20)) 
    for i,r in group_value.iterrows(): 
     r = r[0:columns-1] 
     r.plot(kind='bar', fill=False, log=False) 
+0

感謝您提供隨機數據的可再現示例。然而,我不能完全重現這一點,因爲在本例中沒有定義'rows'變量。你能否澄清'rows'的價值? –

+0

這些行是由隨機數生成器創建的索引A,B,C和D中的值。此代碼應該生成一個輸出,其中每個子集中只填寫一個子圖。第一個子集由3行數據組成,第二個子集包含4行,第三個子集包含三行數據。每行數據有4個值,索引爲a,b,c和d。 –

+0

對不起,我應該更清楚。你可以在這一行中定義你的'rows'變量:'rows,columns = group_value.shape',它在你嘗試使用這行後會出現三行:'fig,axes = plt.subplots(rows, 1,sharex = True,sharey = True,figsize =(15,20))''。爲了讓這個代碼示例運行,'rows'必須在使用之前定義。這是我試圖運行你的代碼的錯誤。 –

回答

1

我想你可能想我稱之爲df_subset以某種方式加以歸納,但這裏的繪製各組自己的面板的方式。

# Your Code Setting Up the Dataset 
import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

df = pd.DataFrame(np.random.randn(10, 4), columns=list('ABCD')) 

df['key1'] = 0 
df.key1.iloc[0:3] = 1 
df.key1.iloc[3:7] = 2 
df.key1.iloc[7:] = 3 


# My Code to Plot in Three Panels 
distinct_keys = df['key1'].unique() 
fig, axes = plt.subplots(len(distinct_keys), 1, sharex=True, figsize=(3,5)) 

for i, key in enumerate(distinct_keys): 
    df_subset = df[df.key1==key] 

    # {maybe insert a line here to summarize df_subset somehow interesting?} 

    # plot 
    axes[i] = df_subset.plot(kind='bar', fill=False, log=False) 
+0

謝謝,這個在測試用例中有效。但是我的數據集需要一些工作。我會盡快完成並在短期內回覆。 –

相關問題