我的图表看起来像这样:
我使用原始的泰坦尼克号数据集并切割了一些列,并通过以下代码创建了一个新的数据帧。
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轴标签移开。其次,酒吧本身似乎比我常用的条形图更薄/更瘦。
不确定如何将酒吧移动到适当的位置,以及如何控制酒吧的宽度。
谢谢。
答案 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'])
当我看到它在R中有多简单时...但幸运的是,Python中的ggplot实现不允许使用geom_bar
绘制stat = 'identity'
。
library(tidyverse)
Cabin_group %>% ggplot() +
geom_bar(aes(x = Cabin, y= Survived, fill = Status),
stat = 'identity')
答案 1 :(得分:0)
这可以通过执行dodge = False来实现。在新版本的seaborn中进行了处理。