2016-11-04 34 views
0

My圖表與barplot杆對齊結束這樣看:X軸不能正常--Seasborn

enter image description here

我把原來的泰坦尼克號數據集和切片某些列,並通過創建一個新的數據幀下面的代碼。

Cabin_group = titanic[['Fare', 'Cabin', 'Survived']] #selecting certain columns from dataframe 
Cabin_group.Cabin = Cabin_group.Cabin.str[0] #cleaning the Cabin column 
Cabin_group = Cabin_group.groupby('Cabin', as_index =False).Survived.mean() 
Cabin_group.drop([6,7], inplace = True) #drop Cabin G and T as instances are too low 
Cabin_group['Status']= ('Poor', 'Rich', 'Rich', 'Medium', 'Medium', 'Poor') #giving each Cabin a status value. 

所以我的新的數據框`Cabin_group」最終看起來像這樣:

Cabin Survived Status 
0  A 0.454545 Poor 
1  B 0.676923 Rich 
2  C 0.574468 Rich 
3  D 0.652174 Medium 
4  E 0.682927 Medium 
5  F 0.523810 Poor 

這裏是我試圖繪製數據框

fig = plt.subplots(1,1, figsize = (10,4)) 
sns.barplot(x ='Cabin', y='Survived', hue ='Status', data = Cabin_group) 
plt.show() 

那麼幾件事情是關閉用這個圖表; 首先,我們將條形圖A,D,E和F移離各自的x軸標籤。其次,酒吧本身似乎比我平常的酒吧更瘦更瘦。

不知道如何將鋼筋移動到合適的位置,以及如何控制鋼筋的寬度。

謝謝。

+1

'色調='Status',seaborn增加了足夠的空間來容納爲每個唯一值酒吧‘在每個x位置狀態’。數據不足以填補這一點的事實表明,這可能不是最好的方法。 –

+1

在0.8.dev中,當'hue'變量沒有嵌套在'x'變量中時,你可以執行'dodge = False'。 – mwaskom

+0

謝謝,將測試出0.8 dev。 – Moondra

回答

1

因爲每個x(每個值爲Status的每個不同值)需要3個小節,所以只有一個被提供。我認爲其中一個解決方案是將顏色映射到Status。據我所知,這是不可能做到這一點。但是,這是一個如何做到這一點的例子。我不確定這一點,因爲將顏色簡單映射到類別似乎很複雜(並且不顯示圖例)。

# Creating a color mapping 
Cabin_group['Color'] = Series(pd.factorize(Cabin_group['Status'])[0]).map(
           lambda x: sns.color_palette()[x]) 

g = sns.barplot(x ='Cabin', y='Survived', data=Cabin_group, palette=Cabin_group['Color']) 

enter image description here

當我看到它是R中是多麼簡單。但infortunately在Python中ggplot實施不允許繪製geom_barstat = 'identity'

library(tidyverse) 

Cabin_group %>% ggplot() + 
    geom_bar(aes(x = Cabin, y= Survived, fill = Status), 
      stat = 'identity') 

enter image description here

當你通過
+0

感謝您的回答。我並不熟悉因式分解,因此我將隨身攜帶代碼並查看是否有簡單的方法來輸出圖例。 – Moondra

+0

HI羅曼。我無法理解 pd.factorize [Cabin_group ['Status'])[0]' – Moondra

+0

中[0]的含義您好,我已經使用'factorize'將每個'Status'轉換爲數值。該函數返回一個元組,我使用'[0]'獲取第一項,轉換後的值爲[0,1,1,2,2,0](第二項是唯一原始值的索引)。我應該使用'Cabin_group ['Status']。map({'Poor':0,'Medium':1,'Rich':2})'爲了更好的理解。不過,正如我所說的,我很難確定這是輸出此圖表的最佳方式。 – Romain