2016-10-20 54 views
0

的所以我原來的數據幀Cabin_hunt看起來是這樣的:使用GROUPBY和拆散泰坦尼克號數據集後,無法繪製了一系列countplots

 Fare  Cabin Pclass Ticket 
583 40.1250 A10  1  13049 
208 27.7208 A11  1  17613 
475 52.0000 A14  1  110465 
556 39.6000 A16  1  11755 
331 29.7000 A18  1  17580 
284 26.0000 A19  1  113056 
599 56.9292 A20  1  17485 
737 512.3292 B101  1  17755 
815 0.0000 B102  1 112058 
215 42.5000 B11  1 113038 
329 57.9792 B18  1 111361 
523 57.9792 B18  1 111361 
269 135.6333 C99  1 17760 
97 63.3583 D10  1 17759 
350 63.3583 D10  3 17759 
765 77.9583 D11  3 13502 

我然後繼續瓜分根據的「小屋」他們'小屋'價值的第一個字母。我最終的目標是以圖形方式顯示Pclass和每個艙室組之間的關係。我通過這段代碼創建的組:

Cabin_group =Cabin_hunt.groupby([ Cabin_hunt.Pclass,Cabin_hunt.Cabin.str[0]]).size().unstack() 

我的輸出是這樣的:

Cabin  A  B  C  D  E  F G T 
Pclass            
1  22.0 65.0 94.0 40.0 34.0 NaN NaN 1.0 
2  NaN NaN NaN 6.0 4.0 13.0 NaN NaN 
3  NaN NaN NaN NaN 3.0 8.0 5.0 NaN 

Cabin_group.columns和索引輸出以下代碼:

Cabin_group。列

Index([u'A', u'B', u'C', u'D', u'E', u'F', u'G', u'T'], dtype='object', name=u'Cabin') 

Cabin_group.index

Int64Index([1, 2, 3], dtype='int64', name=u'Pclass') 

理想的情況下,我想8個圖表一個一個屏幕;每個字母一個(A-T)。 在每個圖表中,我想顯示三個小節,每個小節表示x軸上的Pclass和y軸上的觀察量。

我玩過CountplotPairGrid,但我無法得到它的工作。

我也嘗試過這樣的事情:

g = sns.FacetGrid(Cabin_group, col=Cabin_group.columns, size=4, aspect=.5) 
g.map(sns.countplot,x=Cabin_group.index) 

現在回想起來似乎是完全錯誤的。

任何建議將不勝感激。

回答

1

至於是什麼,我從你的,你想要得到的圖形的描述明白了,這是我會在IPython的筆記本做:

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 
%matplotlib inline 

# Generate Data 
data = np.array(
    [[ 22., 65., 94., 40., 34., np.nan, np.nan, 1.], 
    [ np.nan, np.nan, np.nan, 6., 4., 13., np.nan, np.nan], 
    [ np.nan, np.nan, np.nan, np.nan, 3., 8., 5., np.nan]] 
) 
df = pd.DataFrame(data) 
df.columns.name = 'Cabin' 
df.columns = 'A  B  C  D  E  F G T'.split() 
df.index.name = 'Pclass' 
df.index = [1, 2, 3] 

# Plot Data 
for no, col in enumerate(df): 
    plt.subplot(2, 4, no+1) 
    df[col].plot(kind='bar', title=col) 
    plt.xlabel('Pclass') 
    plt.ylabel('Amount of observations') 
    plt.ylim([0, df.max().max()]) 
plt.tight_layout() 
plt.show() 

這是結果:

enter image description here

+0

從快速瀏覽是啊,這是我正在尋找的線路!唯一的事情是,對於Pclass,我希望這些值是1,2,3而不是0,1,2。你的代碼看起來比我想象的要複雜得多(難怪我弄不明白)所以我打算玩一下它,看看我還有什麼問題。我非常感謝你的幫助。 – Moondra

+0

歡迎您!我將索引設置爲[1,2,3],以便Pclass值以您想要的方式顯示。 –

+0

我很困惑你如何能夠將不同的Pclasses放到x軸上,並且將y軸上的值放到不同的位置。這是一個自動的過程,當一列繪製直方圖?通過直方圖繪製列,行(索引)被標記到x軸上,並且值由y軸表示? – Moondra

相關問題