Seaborn 多个条形图

Posted

技术标签:

【中文标题】Seaborn 多个条形图【英文标题】:Seaborn multiple barplots 【发布时间】:2016-12-12 23:17:52 【问题描述】:

我有一个看起来像这样的 pandas 数据框:

    class       men       woman   children
0   first   0.91468    0.667971   0.660562
1   second  0.30012    0.329380   0.882608
2   third   0.11899    0.189747   0.121259

我将如何使用 seaborn 创建一个看起来像这样的情节?我是否必须以某种方式重新排列我的数据?

(来源:mwaskom at stanford.edu)

【问题讨论】:

【参考方案1】:

是的,您需要重塑 DataFrame:

df = pd.melt(df, id_vars="class", var_name="sex", value_name="survival rate")
df
Out: 
    class       sex  survival rate
0   first       men       0.914680
1  second       men       0.300120
2   third       men       0.118990
3   first     woman       0.667971
4  second     woman       0.329380
5   third     woman       0.189747
6   first  children       0.660562
7  second  children       0.882608
8   third  children       0.121259

现在,您可以使用 factorplot(v0.8.1 或更早版本):

sns.factorplot(x='class', y='survival rate', hue='sex', data=df, kind='bar')

对于 0.9.0 或更高版本,正如 Matthew 在 comments 中所述,您需要使用重命名的版本 catplot

sns.catplot(x='class', y='survival rate', hue='sex', data=df, kind='bar')

【讨论】:

这是正确的,但我会看看pd.melt。它做了同样的重塑,但更干净。 不错。我添加了一个额外的编辑,它节省了一行代码并使结果更加健壮,因为它不依赖于你知道列的顺序。 请注意,factorplot 已重命名为 catplot,如下所述:seaborn.pydata.org/whatsnew.html?highlight=factorplot @Matthew 谢谢,我加了注释。【参考方案2】:

我知道我的回答来得太晚了,但我希望有人能从中受益。

为了解决上述问题,我当然在重新排列数据后使用了以下代码:

数据:

d = 'class': ['first', 'second', 'third', 'first', 'second', 'third', 'first', 'second', 'third'], 'sex': ['men', 'men', 'men', 'woman', 'woman', 'woman', 'children', 'children', 'children'], 'survival_rate':[0.914680, 0.300120, 0.118990, 0.667971, 0.329380, 0.189747, 0.660562, 0.882608, 0.121259] 

df = pd.DataFrame(data=d)

sns.factorplot("sex", "survival_rate", col="class", data=df, kind="bar")

【讨论】:

谢谢,如果我不想为每个地块设置相同的比例怎么办?

以上是关于Seaborn 多个条形图的主要内容,如果未能解决你的问题,请参考以下文章

Python使用seaborn可视化分组条形图(side by side)并且在分组条形图的条形上添加数值标签(seaborn grouped bar plot add labels)

用 Pandas 上的值注释条形图(在 Seaborn factorplot 条形图上)

删除 Seaborn 条形图图例标题

seaborn 多变量组条形图

Seaborn 条形图排序

如何使用 Seaborn 创建 FacetGrid 堆叠条形图?