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

循环绘制多组柱状图时,如何在柱子上方标注数值?

解决循环绘制柱状图时柱子上方标注数值的问题

问题分析

你的代码存在两个核心问题:

  • 未在每次循环中创建新画布并清理旧绘图状态,导致元素叠加干扰标注渲染
  • 使用year is twenty这类对象身份判断不可靠,若数据对象有复制/重建会失效

修改后的代码

# 将年份与对应数据配对,避免不可靠的对象判断
year_data = [
    ("2020", twenty),
    ("2021", twentyone),
    ("2022", twentytwo),
    ("2023", twentythree)
]

for title, data in year_data:
    # 每次循环创建新画布,避免状态污染
    plt.figure(figsize=(8, 6))
    ax = sns.barplot(data=data, errorbar=None)
    
    # 设置图表基础属性
    ax.set_ylim(0, 60)
    ax.set_xticklabels(ax.get_xticklabels(), rotation=45, horizontalalignment='right')
    ax.set_xlabel('Type of error')
    ax.set_title(title)
    
    # 遍历所有柱子容器,添加数值标注(支持格式控制)
    for container in ax.containers:
        ax.bar_label(container, fmt="%.1f", padding=3)  # padding调整标注与柱子的间距
    
    # 保存并清理画布
    plt.tight_layout()
    plt.savefig(f'barplot_{title}.png', bbox_inches="tight")
    plt.close()

关键调整点

  • 用元组列表绑定年份标题与对应数据,替代不可靠的is判断
  • 每次循环创建新plt.figure()并在结束时plt.close(),彻底隔离不同年份的绘图状态
  • 将ax.bar_label放在统一位置处理,无需在分支中重复编写,同时通过fmt控制数值格式,padding优化标注位置

内容的提问来源于stack exchange,提问作者Manolo Dominguez Becerra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.15 22:04:53