如何解决seaborn.catplot() 色调无法正常工作
我正在尝试用 seaborn.facetgrid
替换 seaborn.catplot
。但是 seaborn.catplot
没有正确标记 Embarked = C
面中的色调。
数据集:泰坦尼克号
e = sns.FacetGrid(data= train_df,col='Embarked')
e.map_dataframe(sns.pointplot,'Pclass','Survived',hue='Sex',palette='deep')
e.add_legend()
Embarked C:男性正确呈现为色调
但我的 seaborn.catplot
显示:
sns.catplot(x='Pclass',y= 'Survived',data=train_df,kind='point',col='Embarked')
开始 C: 男性未正确呈现为色调
解决方法
JohanC 已经在他的评论中取笑了答案。我只会解释和完成。
以下是 seaborn.catplot
的 documentation 关于订购的说明:
与底层绘图函数的情况一样,如果变量具有 categorical 数据类型,则将从对象中推断出分类变量的级别及其顺序。否则,您可能必须使用更改数据框排序或使用函数参数(orient
、order
、hue_order
等)来正确设置绘图。
这意味着您可以例如使用 hue_order
参数确保绘图按您希望的方式排序:
order,hue_order:字符串列表,可选
按顺序绘制分类级别,否则从数据对象推断级别。
这里是如何在你的情况下使用它:
sns.catplot(x='Pclass',y='Survived',hue='Sex',hue_order=['male','female'],data=train_df,kind='point',col='Embarked')
或者,如文档中所述并由 JohanC 指出,您可以将 train_df['Sex']
列的类型转换为分类类型。然后由 seaborn
推断顺序。
谢谢 JohanC。是的,我的 FacetGrid 图是错误的。我手动检查过。
train_df[(train_df['Embarked']=='C') & (train_df['Survived']==1)].groupby('Sex').count()['Survived']
输出:
Sex
female 64
male 29
女性比男性大。
在 FacetGrid
中应该指定 hue_order
否则可能会给出错误的结果。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。