📜  如何在 Seaborn 中重叠两个条形图?(1)

📅  最后修改于: 2023-12-03 14:52:34.298000             🧑  作者: Mango

如何在 Seaborn 中重叠两个条形图?

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() 函数创建仅包含一个图例的图表,使其更具可读性。