Seaborn jointplot直方图按hue参数及自定义调色板着色报错咨询
报错原因
新版Seaborn(v0.11及以上)中jointplot的边际图绘制函数已从旧版distplot替换为histplot,因此不再支持嵌套的hist_kws参数,边际图的配置项可以直接传入marginal_kws中。
解决方法
方法1:直接通过官方参数配置
边际图会自动继承主图的hue分类规则,只需将调色板参数直接传入marginal_kws即可实现分类着色,无需嵌套层级:
g = sns.jointplot( data=emb_df, x='f0', y='y', kind="hist", hue='klabels', palette='tab10', # 直接传入histplot支持的参数即可,不需要套hist_kws marginal_kws={'palette': 'tab10'} ) plt.show()
方法2:手动自定义边际图着色
你之前用plt.setp(g.ax_marg_y.patches, color='grey')只能统一设色的原因是该方法会批量修改所有直方图块的颜色,没有匹配每个色块对应的klabels分类。如果需要单独调整边际图的配色规则,可以手动建立分类与颜色的映射后逐个设置:
# 生成klabels分类与调色板颜色的映射关系 unique_labels = emb_df['klabels'].unique() color_map = dict(zip(unique_labels, sns.color_palette("tab10", n_colors=len(unique_labels)))) g = sns.jointplot( data=emb_df, x='f0', y='y', kind="hist", hue='klabels', palette=color_map ) # 为y轴边际图的每个色块匹配对应分类的颜色 for patch, label in zip(g.ax_marg_y.patches, g.ax_marg_y.get_legend_handles_labels()[1]): patch.set_facecolor(color_map[label]) # 如果需要调整x轴边际图配色也可以按同样逻辑处理 # for patch, label in zip(g.ax_marg_x.patches, g.ax_marg_x.get_legend_handles_labels()[1]): # patch.set_facecolor(color_map[label]) plt.show()
内容的提问来源于stack exchange,提问作者Bigboss01
相关产品推荐
相关产品推荐

