如何使用seaborn创建按登船港口划分的乘客生存情况分组柱状图
错误原因
你当前的用法中,sns.barplot()默认会对y字段做均值聚合,所以输出的是不同登船点的乘客平均存活率,不是你需要的存活/死亡人数统计。同时你将y和hue参数都设为Survived,逻辑也完全不匹配需求。
解决方案
方案1:直接使用计数专用的sns.countplot()(更简便)
该函数专门用来统计分组的样本数量,不需要额外处理源数据,直接替换绘图函数即可:
df_drop_Emb = df_titanic.dropna(subset= ["Embarked"]) plt.figure(figsize=(10, 8)) # 替换barplot为countplot,不需要传入y参数,默认统计样本数量 sns.countplot(x="Embarked", hue="Survived", data=df_drop_Emb) plt.ylabel("人数", size=14) plt.xlabel("登船港口", size=14) plt.title("各登船港口存活/死亡乘客数量", size=18) plt.show()
方案2:坚持使用sns.barplot()的话,先手动做分组聚合统计人数
先按登船点、存活状态两个维度分组统计人数,再把统计得到的人数字段传给y参数即可:
df_drop_Emb = df_titanic.dropna(subset= ["Embarked"]) # 分组统计各分类下的人数 count_df = df_drop_Emb.groupby(["Embarked", "Survived"], as_index=False).size() plt.figure(figsize=(10, 8)) sns.barplot(x="Embarked", y="size", # y参数设置为统计得到的人数字段 hue="Survived", data=count_df) plt.ylabel("人数", size=14) plt.xlabel("登船港口", size=14) plt.title("各登船港口存活/死亡乘客数量", size=18) plt.show()
内容的提问来源于stack exchange,提问作者mert
相关产品推荐
相关产品推荐

