You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Seaborn箱线图图例致叠加蜂群图错位,如何保留图例并对齐?

解决Seaborn中Boxplot与Swarmplot叠加时的错位问题

问题描述

我用Seaborn叠加显示boxplot和swarmplot,给boxplot加上hue='data_type'参数生成图例时,boxplot位置偏移,但swarmplot未同步调整,导致两者错位(图1)。

错位的叠加图

当前使用的代码:

sns.swarmplot(x = 'data_type', y = 'count', data = df, 
                   alpha = .5, palette='colorblind', hue='data_type', legend = 0, zorder=0.5)

ax = sns.boxplot(x = 'data_type', y = 'count', data = df,
                 palette='colorblind', showfliers = 0, hue = 'data_type')

plt.legend(bbox_to_anchor = (1.02, 1), loc = 'upper left')

如果移除boxplot的hue='data_type'参数(不显示图例),两者就能正常对齐(图2)。

对齐的叠加图

需求:在显示boxplot图例的同时,保持boxplot与swarmplot的对齐。

解决方案

之前有同类问题是swarmplot偏移,通过给swarmplot设置dodge=True解决。本次是boxplot偏移,参考设置barplot的dodge=False思路,给boxplot添加dodge=False参数即可。

修改后的代码:

sns.swarmplot(x = 'data_type', y = 'count', data = df, 
                   alpha = .5, palette='colorblind', hue='data_type', legend = 0, zorder=0.5)

# 给boxplot添加dodge=False参数,关闭分组偏移
ax = sns.boxplot(x = 'data_type', y = 'count', data = df,
                 palette='colorblind', showfliers = 0, hue = 'data_type', dodge=False)

plt.legend(bbox_to_anchor = (1.02, 1), loc = 'upper left')

原理:给boxplot设置hue后,Seaborn默认会启用dodge(分组偏移),但此时swarmplot未开启对应偏移,导致错位。设置dodge=False可关闭boxplot的分组偏移,让它和swarmplot位置保持一致,同时保留hue带来的图例效果。


内容的提问来源于stack exchange,提问作者Nick Ferrari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.26 08:15:02