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
相关产品推荐
相关产品推荐

