使用Python轻松绘制带误差棒的柱状图

 更新时间:2025年08月05日 09:36:31   作者:Code_Verse  
误差棒(Error Bar)是数据可视化中传递可靠性信息的 “利器”,它能在展示数据平均值的同时,直观呈现数据的波动范围,下面我们就来看看如何使用Python轻松绘制带误差棒的柱状图吧

大家好!今天来教大家一个超实用的数据分析技能 —— 用 Python 制作带误差棒的柱状图。误差棒(Error Bar)是数据可视化中传递可靠性信息的 “利器”,它能在展示数据平均值的同时,直观呈现数据的波动范围(如标准差、标准误等)。无论是学生做实验报告、科研人员展示成果,还是职场人汇报数据分析,这个技能都能让你的图表瞬间提升专业度,让数据更有说服力。

一、为什么需要误差棒

在数据分析中,我们常常用平均值来代表一组数据的 “典型值”,但平均值背后的波动同样重要。比如:

  • 两组数据的平均值可能相近,但一组数据波动很小(可靠性高),另一组波动很大(可靠性低);
  • 误差棒能帮读者快速判断数据差异是否 “显著”(比如两组误差棒是否重叠)。

今天我们就用 Python 的matplotlib库来实现这个功能,全程代码清晰易懂,小白也能轻松上手~

二、准备工作:安装必要的库

在开始之前,我们需要确保电脑上安装了两个 Python 库:

  • numpy:用于数值计算(比如生成坐标轴);
  • matplotlib.pyplot:Python 最常用的绘图库。

如果还没安装,打开终端(或命令提示符)输入以下命令:

pip install numpy matplotlib

安装完成后,就可以开始写代码啦!

三、完整代码:带误差棒的柱状图实现

先直接上完整代码,后面会逐行解释每一步的作用:

import numpy as np
import matplotlib.pyplot as plt
# 1. 准备数据
labels = ['samp1', 'samp2', 'samp3', 'samp4', 'samp5']  # x轴标签(样本名称)
A_means = [0.25, 0.22, 0.25, 0.2, 0.2]  # A组数据的平均值
B_means = [0.4, 0.26, 0.27, 0.35, 0.22]  # B组数据的平均值
C_means = [0.3, 0.25, 0.28, 0.3, 0.18]  # C组数据的平均值

A_errors = [0.05, 0.04, 0.05, 0.03, 0.04]  # A组数据的误差范围
B_errors = [0.02, 0.03, 0.04, 0.03, 0.02]  # B组数据的误差范围
C_errors = [0.03, 0.02, 0.03, 0.02, 0.03]  # C组数据的误差范围
# 2. 设置坐标轴和柱宽
x = np.arange(len(labels))  # 生成x轴刻度位置(0,1,2,3,4)
width = 0.2  # 柱子的宽度
# 3. 创建图形和轴
fig, ax = plt.subplots()
# 4. 绘制柱状图(带误差棒)
rects1 = ax.bar(x - width, A_means, width, yerr=A_errors, label='A', color='#66c2a5', capsize=5)
rects2 = ax.bar(x, B_means, width, yerr=B_errors, label='B', color='#fc8d62', capsize=5)
rects3 = ax.bar(x + width, C_means, width, yerr=C_errors, label='C', color='#8da0cb', capsize=5)
# 5. 添加标签、标题和图例
ax.set_xlabel('Samples')  # x轴名称
ax.set_ylabel('RMSE (m)')  # y轴名称(这里以RMSE为例,可替换为你的指标)
ax.set_title('Comparison of RMSE Across Samples')  # 图表标题
ax.set_xticks(x)  # 设置x轴刻度位置
ax.set_xticklabels(labels)  # 设置x轴刻度标签(替换为样本名称)
ax.legend()  # 显示图例(区分A/B/C组)
# 6. 美化图表
ax.yaxis.grid(True)  # 添加y轴网格线(方便读数)
ax.set_facecolor('white')  # 设置图表背景为白色
# 7. 显示图形
plt.tight_layout()  # 自动调整布局,避免标签重叠
plt.show()  # 显示图表

 运行代码后,你会得到一张这样的图表:

(注:实际运行后会弹出窗口显示图表,包含 5 个样本、3 组数据,每个柱子顶部都有误差棒)

四、代码逐行解析:小白也能看懂

下面我们来详细解释每一步的作用,帮你理解代码逻辑,以后就能根据自己的需求修改啦~

1. 导入库

import numpy as np
import matplotlib.pyplot as plt
  • numpy 缩写为 np:用于生成 x 轴的刻度位置(后面会用到);
  • matplotlib.pyplot 缩写为 plt:用于绘制图表的核心库。

2. 准备数据:核心中的核心

# x轴标签(样本名称)
labels = ['samp1', 'samp2', 'samp3', 'samp4', 'samp5']
# 各组数据的平均值(柱子高度)
A_means = [0.25, 0.22, 0.25, 0.2, 0.2]
B_means = [0.4, 0.26, 0.27, 0.35, 0.22]
C_means = [0.3, 0.25, 0.28, 0.3, 0.18]
# 各组数据的误差范围(误差棒长度)
A_errors = [0.05, 0.04, 0.05, 0.03, 0.04]
B_errors = [0.02, 0.03, 0.04, 0.03, 0.02]
C_errors = [0.03, 0.02, 0.03, 0.02, 0.03]
  • labels:x 轴上显示的文本(比如样本名称、类别等);
  • xxx_means:每组数据的平均值,决定了柱子的高度;
  • xxx_errors:每组数据的误差值(比如标准差、标准误),决定了误差棒的长度。

小提示:这里的数据是示例,你可以替换成自己的实际数据,注意保持列表长度一致(比如有 5 个样本,每个列表都要有 5 个元素)。

3. 设置坐标轴和柱宽

x = np.arange(len(labels))  # 生成x轴刻度位置:[0, 1, 2, 3, 4]
width = 0.2  # 柱子的宽度
  • np.arange(len(labels)):根据样本数量生成连续的整数(比如 5 个样本就是[0,1,2,3,4]),作为 x 轴的 “基准位置”;
  • width:每个柱子的宽度,后续会用它来调整多组数据的位置(避免柱子重叠)。

4. 创建图形和轴

fig, ax = plt.subplots()
  • fig:代表整个图表窗口(可以理解为 “画布”);
  • ax:代表图表中的坐标轴(可以理解为 “绘图区域”),后续的绘图操作主要通过ax实现。

5. 绘制带误差棒的柱状图(关键步骤)

# 绘制A组:x轴位置在基准位置左侧(x - width)
rects1 = ax.bar(x - width, A_means, width, yerr=A_errors, label='A', color='#66c2a5', capsize=5)
# 绘制B组:x轴位置在基准位置(x)
rects2 = ax.bar(x, B_means, width, yerr=B_errors, label='B', color='#fc8d62', capsize=5)
# 绘制C组:x轴位置在基准位置右侧(x + width)
rects3 = ax.bar(x + width, C_means, width, yerr=C_errors, label='C', color='#8da0cb', capsize=5)

这是最核心的一行代码,ax.bar() 用于绘制柱状图,参数含义:

  • x - width / x / x + width:三组柱子的 x 轴位置(错开排列,避免重叠);
  • A_means / B_means / C_means:柱子的高度(平均值);
  • width:柱子宽度(前面定义的0.2);
  • yerr=xxx_errors误差棒的关键参数,指定 y 轴方向的误差范围(如果需要 x 轴误差棒,用xerr);
  • label:每组数据的名称(用于图例);
  • color:柱子颜色(这里用了美观的 RGB 色值,可自行替换);
  • capsize=5:误差棒顶部 / 底部的 “帽子” 大小(让误差棒更美观,避免变成一条细线)。

小技巧:如果有更多组数据(比如 D 组),可以继续调整位置(x + 2*width),同时注意控制总宽度不要超过刻度间隔哦~

6. 添加标签、标题和图例

ax.set_xlabel('Samples')  # x轴名称
ax.set_ylabel('RMSE (m)')  # y轴名称(根据你的数据修改,比如“准确率”“平均值”)
ax.set_title('Comparison of RMSE Across Samples')  # 图表标题
ax.set_xticks(x)  # 设置x轴刻度位置为基准位置
ax.set_xticklabels(labels)  # 用样本名称替换x轴刻度(默认是0,1,2...)
ax.legend()  # 显示图例(区分不同组数据)

这些参数用于完善图表信息,让读者能快速理解图表内容。 

7. 美化图表

ax.yaxis.grid(True)  # 添加y轴网格线(方便读取具体数值)
ax.set_facecolor('white')  # 设置图表背景为白色(默认可能是浅灰色)

 简单的美化能让图表更清晰,网格线尤其适合需要精确读数的场景。

8. 显示图表

plt.tight_layout()  # 自动调整布局,避免标签被截断(比如标题、轴标签超出窗口)
plt.show()  # 显示图表窗口
  • plt.tight_layout() 是个非常实用的函数,能自动调整图表元素的位置,避免标签重叠或被截断;
  • plt.show() 用于在屏幕上显示绘制好的图表。

五、代码实现

 如下图所示:

六、总结

带误差棒的柱状图是数据可视化中非常实用的工具,今天我们用 matplotlib 实现了它,核心步骤包括:

  • 准备数据(平均值 + 误差值);
  • 设置坐标轴和柱宽;
  • 用 ax.bar() 绘制柱状图,通过 yerr 参数添加误差棒;
  • 完善标签、标题和图例;
  • 美化并显示图表。

只要理解了每一步的逻辑,你就能轻松修改代码,适配自己的数据集。快去试试用自己的数据生成图表吧!

到此这篇关于使用Python轻松绘制带误差棒的柱状图的文章就介绍到这了,更多相关Python绘制柱状图内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python爬取个人微信朋友信息操作示例

    Python爬取个人微信朋友信息操作示例

    这篇文章主要介绍了Python爬取个人微信朋友信息操作,涉及Python使用itchat包实现微信朋友信息爬取操作相关实现技巧,需要的朋友可以参考下
    2018-08-08
  • 浅谈django的render函数的参数问题

    浅谈django的render函数的参数问题

    今天小编就为大家分享一篇浅谈django的render函数的参数问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • 对TensorFlow的assign赋值用法详解

    对TensorFlow的assign赋值用法详解

    今天小编就为大家分享一篇对TensorFlow的assign赋值用法详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-07-07
  • Python将Word文档转为PDF的两种方法

    Python将Word文档转为PDF的两种方法

    这篇文章主要介绍了两种将docx和doc文件转换为PDF的方法,方法一使用了docx2pdf模块,方法二使用了win32com模块,文中通过代码及图文介绍的非常详细,需要的朋友可以参考下
    2024-12-12
  • numpy删除单行、删除单列、删除多列实现方式

    numpy删除单行、删除单列、删除多列实现方式

    这篇文章主要介绍了numpy删除单行、删除单列、删除多列实现方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-02-02
  • Python开发必知必会标识符UUID全面使用指南

    Python开发必知必会标识符UUID全面使用指南

    在Python编程中,UUID(通用唯一标识符)是一个非常有用的工具,用于生成唯一的标识符,本文将深入探讨Python中UUID的用法、不同版本的UUID、以及如何在实际应用中充分利用UUID的优势
    2023-12-12
  • python 实现syslog 服务器的详细过程

    python 实现syslog 服务器的详细过程

    这篇文章主要介绍了python 实现syslog服务器的详细过程,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • Python语言描述随机梯度下降法

    Python语言描述随机梯度下降法

    这篇文章主要介绍了Python语言描述随机梯度下降法,具有一定借鉴价值,需要的朋友可以参考下
    2018-01-01
  • 盘点Python中读取和提取JSON文件的4种方法

    盘点Python中读取和提取JSON文件的4种方法

    JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,Python中提供了多种方式来读取和处理JSON文件,本文将详细介绍四种常见的方法,希望对大家有所帮助
    2024-03-03
  • python3中sys.argv的实例用法

    python3中sys.argv的实例用法

    在本篇文章里小编给大家分享的是关于python3中sys.argv的实例用法内容,需要的朋友们可以学习下。
    2020-04-04

最新评论