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

matplotlib绘制带误差棒柱状图如何自动调整标注文本位置

带误差棒柱状图的标准差标注自动适配位置方案

问题场景

绘制带误差棒的柱状图时,设定绘图规则如下:

  • 蓝色柱体代表均值
  • 红色误差棒代表标准差
    由于数据同时存在正值、负值均值,使用固定偏移的标注代码时,部分文本会和柱体、误差棒重叠导致模糊难辨。
    原问题代码:
for i in range(len(col_name)):
    plt.text(col_name[i], mean[i]+0.03, round(std[i],3), fontsize = 8, color='black')

原问题运行效果:
标注重叠效果示意图

解决方法

核心逻辑是放弃固定在均值位置加统一偏移的写法,改为根据误差棒端点位置+均值正负自动调整标注位置,代码如下:

# 可根据自身y轴范围调整偏移大小,y轴范围-1~1时0.05为合适值
text_offset = 0.05
for i in range(len(col_name)):
    # 先计算当前柱误差棒的上下端点
    err_upper = mean[i] + std[i]
    err_lower = mean[i] - std[i]
    
    # 正值柱:标注放在误差棒上方
    if mean[i] >= 0:
        y_pos = err_upper + text_offset
        vertical_align = "bottom"
    # 负值柱:标注放在误差棒下方
    else:
        y_pos = err_lower - text_offset
        vertical_align = "top"
    
    plt.text(
        x=col_name[i],
        y=y_pos,
        s=round(std[i], 3),
        fontsize=8,
        color="black",
        ha="center",  # 水平和柱体居中对齐
        va=vertical_align,
        # 可选:加半透明白底彻底避免重叠
        # bbox=dict(facecolor="white", alpha=0.8, pad=1, edgecolor="none")
    )

优化说明

  • 标注基准从均值改为误差棒最外端点,从根源避免文本压在误差棒、柱体上
  • 自动根据均值正负切换标注的上下位置,适配正负混合柱的场景
  • 增加对齐参数,文本和柱体的对应关系更清晰
  • 可选的半透明白底参数,可在柱体密集、误差棒交叉的场景下进一步提升可读性

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 20:54:24