X轴未与条形图中的条形图正确对齐 - 出生

时间:2016-11-04 19:22:25

标签: pandas matplotlib seaborn

我的图表看起来像这样:

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轴标签移开。其次,酒吧本身似乎比我常用的条形图更薄/更瘦。

不确定如何将酒吧移动到适当的位置,以及如何控制酒吧的宽度。

谢谢。

2 个答案:

答案 0 :(得分:1)

条形图未对齐,因为它预计每个x有3个条形(Status的每个不同值为1条),并且只提供一个条形。我认为其中一个解决方案是将颜色映射到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中有多简单时...但幸运的是,Python中的ggplot实现不允许使用geom_bar绘制stat = 'identity'

library(tidyverse)

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

enter image description here

答案 1 :(得分:0)

这可以通过执行dodge = False来实现。在新版本的seaborn中进行了处理。