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

Seaborn绘制箱线图偶发不显示中位数线是什么原因?

Seaborn箱线图单组中位数线缺失问题原因及解决方案

常见原因

  • 中位数与四分位边界重合:这是此类问题最常见的诱因。如果ASD分组的*第二四分位数(中位数Q2)*与第一四分位数(Q1)或第三四分位数(Q3)数值完全相等,中位数线会和箱体的上下边框完全重叠,视觉上就会消失。你可以先打印ASD组的分位数验证:print(data_WHO[data_WHO['group2']=='ASD']['WHO100Sozialscore'].describe())
  • 均值标记遮盖中位数:你代码中开启了showmeans=True,默认均值会用绿色三角形标记,如果ASD组的均值和中位数数值接近/完全相等,标记会直接覆盖住较细的中位数线。
  • 渲染精度问题:高DPI下如果线宽设置过细,线条刚好落在像素缝隙也可能出现不可见的情况,发生概率极低。

修复方案

  • 手动调整中位数线样式:给boxplot传入medianprops参数单独设置中位数线的颜色、宽度,确保和箱体、均值标记区分开,示例修改代码:
sns.set_style("darkgrid")
sns.set(font_scale = 1.5)
fig, ax = plt.subplots(figsize=(12,12), dpi=300)

# 新增medianprops设置中位数线样式,可自行调整颜色、线宽
sns.boxplot(x="group2", y="WHO100Sozialscore", data=data_WHO, palette="Set2", 
            width=.5, ax=ax, showmeans=True,
            medianprops={"color": "red", "linewidth": 2}).set(xlabel='\nDiagnosis', ylabel='WHO-Social', title='Secondary Analysis WHO-Social Scores\n', yticks=[0,10,20,30,40,50,60,70,80,90,100])
  • 调整均值标记样式:如果是均值遮盖问题,可以给meanprops设置更小的标记尺寸,或者换用半透明样式避免覆盖:meanprops={"marker":"o", "markerfacecolor":"white", "markersize":8}
  • 补充数据分布展示:如果确认ASD组的中位数和四分位确实重合,可配合绘制散点/蜂群图叠加在箱线图上,补充展示数据分布特征。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 16:54:03