使用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字符串介绍

    这篇文章主要介绍了Python入门教程(九)Python字符串,Python是一门非常强大好用的语言,也有着易上手的特性,本文为入门教程,需要的朋友可以参考下
    2023-04-04
  • Python如何实现xml解析并输出到Excel上

    Python如何实现xml解析并输出到Excel上

    本文介绍了如何使用Python的ElementTree模块解析XML文件,并将解析后的数据写入Excel文件,通过编写XML文件、解析XML、编写将数据写入Excel的函数,最终实现XML数据到Excel的转换
    2025-02-02
  • Pycharm安装scrapy及初始化爬虫项目的完整步骤

    Pycharm安装scrapy及初始化爬虫项目的完整步骤

    因为入门python以来一直使用pycharm,所以对着黑白的DOS不习惯,所以此次来实现使用pycharm进行实现使用scrapy框架,下面这篇文章主要给大家介绍了关于Pycharm安装scrapy及初始化爬虫项目的完整步骤,需要的朋友可以参考下
    2022-08-08
  • django 捕获异常和日志系统过程详解

    django 捕获异常和日志系统过程详解

    这篇文章主要介绍了django-捕获异常和日志系统过程详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-07-07
  • 在漏洞利用Python代码真的很爽

    在漏洞利用Python代码真的很爽

    在漏洞利用Python代码真的很爽...
    2007-08-08
  • Python多线程以及多线程中join()的使用方法示例

    Python多线程以及多线程中join()的使用方法示例

    join()是线程类Thread的方法,官方的说明是:等待这个线程结束,也就是说当前线程等待这个线程结束后再继续执行,这篇文章主要给大家介绍了关于Python多线程以及多线程中join()使用的相关资料,需要的朋友可以参考下
    2021-07-07
  • pytorch中的model.eval()和BN层的使用

    pytorch中的model.eval()和BN层的使用

    这篇文章主要介绍了pytorch中的model.eval()和BN层的使用,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-05-05
  • 使用python把Excel中的数据在页面中可视化

    使用python把Excel中的数据在页面中可视化

    最近学习数据分析,感觉Python做数据分析真的好用,下面这篇文章主要给大家介绍了关于如何使用python把Excel中的数据在页面中可视化的相关资料,需要的朋友可以参考下
    2022-03-03
  • matplotlib之pyplot模块之标题(title()和suptitle())

    matplotlib之pyplot模块之标题(title()和suptitle())

    这篇文章主要介绍了matplotlib之pyplot模块之标题(title()和suptitle()),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • opencv 图像轮廓的实现示例

    opencv 图像轮廓的实现示例

    这篇文章主要介绍了opencv 图像轮廓的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-07-07

最新评论