📅  最后修改于: 2023-12-03 14:52:34.298000             🧑  作者: Mango
Seaborn 是一个流行的数据可视化库,可以帮助我们以有效和令人愉悦的方式呈现数据。在 Seaborn 中,可以使用 barplot()
函数轻松地创建条形图。有时,您可能想要在同一组数据中比较两个变量的不同级别,最好的方法是通过重叠两个条形图来实现。
在本例中,我们将使用 Seaborn 自带的 titanic
数据集。我们将根据乘客的性别和船舱等级创建两个条形图。首先,我们需要加载数据集并了解其中包含的变量。
import seaborn as sns
sns.set(style="darkgrid")
# 加载数据
titanic = sns.load_dataset("titanic")
titanic.head()
输出:
survived pclass sex ... fare embarked class
0 0 3 male ... 7.2500 Southampton Third
1 1 1 female ... 71.2833 Cherbourg First
2 1 3 female ... 7.9250 Southampton Third
3 1 1 female ... 53.1000 Southampton First
4 0 3 male ... 8.0500 Southampton Third
[5 rows x 10 columns]
现在,我们将创建两个组合图表,以显示各等级舱位中男女乘客的存活率。
对于此任务,我们需要使用 hue
参数来区分男性和女性乘客。使用 sns.barplot()
函数创建第一个条形图,然后使用 bottom
参数创建另一个条形图并覆盖前一个图。最终的代码如下所示。
# 创建第一个条形图(男性)
sns.barplot(data=titanic, x="class", y="survived", hue="sex", palette="Blues")
# 创建第二个条形图(女性),并将之前的条形图覆盖
sns.barplot(data=titanic, x="class", y="survived", hue="sex", palette="Reds", bottom=titanic[titanic["sex"]=="male"].groupby("class")["survived"].mean())
# 设置图例(仅需要一个图例)
handles, labels = plt.gca().get_legend_handles_labels()
plt.legend(handles[:2], labels[:2])
# 显示图表
plt.show()
输出:
如上所述,我们创建了两个条形图,分别使用不同的颜色图谱来区分男性和女性。我们使用 bottom
参数将女性乘客的条形图叠加在男性乘客的条形图上,并使用 groupby()
函数计算出每个等级舱位中男女乘客的平均存活率。
最后,我们使用 plt.legend()
函数创建仅包含一个图例的图表,以防止显示两个图例。
在本文中,我们介绍了如何在 Seaborn 中创建重叠的条形图。我们使用了 sns.barplot()
函数和 hue
参数来区分性别,使用 bottom
参数叠加并覆盖第一个图。最后,我们使用 plt.legend()
函数创建仅包含一个图例的图表,使其更具可读性。