seaborn.catplot的hue参数在Embarked=C分面显示异常如何解决?
问题原因
- 核心差异是
FacetGrid.map_dataframe和catplot的hue映射逻辑不同:- 用
FacetGrid调用pointplot时,每个分面的绘图逻辑独立,pointplot会自动根据当前分面的现有数据生成hue颜色映射、适配标记位置,即使某组数据缺失也不会受其他分面影响 catplot采用全局统一hue映射规则:会提前用全量数据集确认hue的所有取值、颜色对应关系、分组偏移(dodge)的宽度,而泰坦尼克号数据集中Embarked=C分组下,存在某Pclass和Sex=male的组合无有效样本的情况,全局预设的偏移位置在当前分面没有对应数据,就会出现标记错位、颜色匹配异常的问题
- 用
- 额外差异:原代码显式指定了
palette='deep',替换为catplot后未传递该参数,也可能出现颜色和预期不一致的情况
解决方法
只需在catplot中显式指定dodge参数,同时统一palette即可,修正后的代码如下:
sns.catplot( x='Pclass', y='Survived', hue='Sex', data=train_df, kind='point', col='Embarked', palette='deep', dodge=True )
如果仍有异常,可以额外指定固定的hue顺序,避免全局自动识别的顺序和单分面顺序不一致:
sns.catplot( x='Pclass', y='Survived', hue='Sex', hue_order=['male', 'female'], data=train_df, kind='point', col='Embarked', palette='deep', dodge=True )
内容的提问来源于stack exchange,提问作者toufique_21
相关产品推荐
相关产品推荐

