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

matplotlib调用plt.boxplot绘制分类箱线图时第二个箱线图缺失

解决方法

两个箱线的元素都在返回对象里,说明图根本没丢,只是视觉上看不到,问题出在数据和默认渲染逻辑上:

  • 你读入的原始数据里animal_weight列有NaN空值,会干扰matplotlib自动计算轴范围的逻辑
  • 两组体重数据里存在极端离群值,把y轴范围拉得特别大,其中一组的箱线因为四分位距相对整个轴范围太小,被压成了贴在轴上的细线,肉眼无法分辨
  • 未显式指定箱线位置时,极端数据场景下偶尔会出现位置计算偏移,导致两个箱线重叠

直接按下面修改即可:

  1. 先清理空值,不要把无效值传入绘图函数
# 过滤掉体重为空的无效记录
bison_clean = bison.dropna(subset=['animal_weight'])
bisonM = bison_clean.loc[bison_clean['animal_sex'] == "M", "animal_weight"].tolist()
bisonF = bison_clean.loc[bison_clean['animal_sex'] == "F", "animal_weight"].tolist()
bison_sex = [bisonM, bisonF]
  1. 绘图时固定箱线位置,手动标注刻度,轴范围显示异常时可手动指定
plt.figure(figsize=(7,5))
# positions显式写死两个箱线的x坐标,避免位置偏移
bp = plt.boxplot(
    bison_sex,
    positions=[1,2],
    patch_artist=True, # 开启后支持给箱线设置填充色
    showfliers=True # 如果离群点把轴拉得太夸张,可临时设为False确认箱线正常后再开启
)
plt.xticks([1,2], ["雄性野牛", "雌性野牛"])
plt.ylabel("动物体重")
# 若仍存在显示压缩问题,可把下面注释打开,根据数据实际范围调整y轴上下限
# plt.ylim(100, 1200)

# 可选:给两个箱线设置不同填充色,区分度更高
for patch, color in zip(bp['boxes'], ['#3377bb', '#dd7744']):
    patch.set_facecolor(color)

plt.show()

执行后就能看到两个独立的箱线,后续可根据需求调整离群点显示、配色、坐标轴范围等参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 15:48:43