python

关注公众号 jb51net

关闭
首页 > 脚本专栏 > python > Python绘制柱状图

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

作者:Code_Verse

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

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

一、为什么需要误差棒

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

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

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

在开始之前,我们需要确保电脑上安装了两个 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

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]

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

3. 设置坐标轴和柱宽

x = np.arange(len(labels))  # 生成x轴刻度位置:[0, 1, 2, 3, 4]
width = 0.2  # 柱子的宽度

4. 创建图形和轴

fig, ax = plt.subplots()

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() 用于绘制柱状图,参数含义:

小技巧:如果有更多组数据(比如 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()  # 显示图表窗口

五、代码实现

 如下图所示:

六、总结

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

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

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

您可能感兴趣的文章:
阅读全文