使用Python輕松繪制帶誤差棒的柱狀圖
大家好!今天來教大家一個(gè)超實(shí)用的數(shù)據(jù)分析技能 —— 用 Python 制作帶誤差棒的柱狀圖。誤差棒(Error Bar)是數(shù)據(jù)可視化中傳遞可靠性信息的 “利器”,它能在展示數(shù)據(jù)平均值的同時(shí),直觀呈現(xiàn)數(shù)據(jù)的波動(dòng)范圍(如標(biāo)準(zhǔn)差、標(biāo)準(zhǔn)誤等)。無論是學(xué)生做實(shí)驗(yàn)報(bào)告、科研人員展示成果,還是職場(chǎng)人匯報(bào)數(shù)據(jù)分析,這個(gè)技能都能讓你的圖表瞬間提升專業(yè)度,讓數(shù)據(jù)更有說服力。
一、為什么需要誤差棒
在數(shù)據(jù)分析中,我們常常用平均值來代表一組數(shù)據(jù)的 “典型值”,但平均值背后的波動(dòng)同樣重要。比如:
- 兩組數(shù)據(jù)的平均值可能相近,但一組數(shù)據(jù)波動(dòng)很小(可靠性高),另一組波動(dòng)很大(可靠性低);
- 誤差棒能幫讀者快速判斷數(shù)據(jù)差異是否 “顯著”(比如兩組誤差棒是否重疊)。
今天我們就用 Python 的matplotlib庫來實(shí)現(xiàn)這個(gè)功能,全程代碼清晰易懂,小白也能輕松上手~
二、準(zhǔn)備工作:安裝必要的庫
在開始之前,我們需要確保電腦上安裝了兩個(gè) Python 庫:
numpy:用于數(shù)值計(jì)算(比如生成坐標(biāo)軸);matplotlib.pyplot:Python 最常用的繪圖庫。
如果還沒安裝,打開終端(或命令提示符)輸入以下命令:
pip install numpy matplotlib
安裝完成后,就可以開始寫代碼啦!
三、完整代碼:帶誤差棒的柱狀圖實(shí)現(xiàn)
先直接上完整代碼,后面會(huì)逐行解釋每一步的作用:
import numpy as np
import matplotlib.pyplot as plt
# 1. 準(zhǔn)備數(shù)據(jù)
labels = ['samp1', 'samp2', 'samp3', 'samp4', 'samp5'] # x軸標(biāo)簽(樣本名稱)
A_means = [0.25, 0.22, 0.25, 0.2, 0.2] # A組數(shù)據(jù)的平均值
B_means = [0.4, 0.26, 0.27, 0.35, 0.22] # B組數(shù)據(jù)的平均值
C_means = [0.3, 0.25, 0.28, 0.3, 0.18] # C組數(shù)據(jù)的平均值
A_errors = [0.05, 0.04, 0.05, 0.03, 0.04] # A組數(shù)據(jù)的誤差范圍
B_errors = [0.02, 0.03, 0.04, 0.03, 0.02] # B組數(shù)據(jù)的誤差范圍
C_errors = [0.03, 0.02, 0.03, 0.02, 0.03] # C組數(shù)據(jù)的誤差范圍
# 2. 設(shè)置坐標(biāo)軸和柱寬
x = np.arange(len(labels)) # 生成x軸刻度位置(0,1,2,3,4)
width = 0.2 # 柱子的寬度
# 3. 創(chuàng)建圖形和軸
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. 添加標(biāo)簽、標(biāo)題和圖例
ax.set_xlabel('Samples') # x軸名稱
ax.set_ylabel('RMSE (m)') # y軸名稱(這里以RMSE為例,可替換為你的指標(biāo))
ax.set_title('Comparison of RMSE Across Samples') # 圖表標(biāo)題
ax.set_xticks(x) # 設(shè)置x軸刻度位置
ax.set_xticklabels(labels) # 設(shè)置x軸刻度標(biāo)簽(替換為樣本名稱)
ax.legend() # 顯示圖例(區(qū)分A/B/C組)
# 6. 美化圖表
ax.yaxis.grid(True) # 添加y軸網(wǎng)格線(方便讀數(shù))
ax.set_facecolor('white') # 設(shè)置圖表背景為白色
# 7. 顯示圖形
plt.tight_layout() # 自動(dòng)調(diào)整布局,避免標(biāo)簽重疊
plt.show() # 顯示圖表運(yùn)行代碼后,你會(huì)得到一張這樣的圖表:

(注:實(shí)際運(yùn)行后會(huì)彈出窗口顯示圖表,包含 5 個(gè)樣本、3 組數(shù)據(jù),每個(gè)柱子頂部都有誤差棒)
四、代碼逐行解析:小白也能看懂
下面我們來詳細(xì)解釋每一步的作用,幫你理解代碼邏輯,以后就能根據(jù)自己的需求修改啦~
1. 導(dǎo)入庫
import numpy as np import matplotlib.pyplot as plt
numpy縮寫為np:用于生成 x 軸的刻度位置(后面會(huì)用到);matplotlib.pyplot縮寫為plt:用于繪制圖表的核心庫。
2. 準(zhǔn)備數(shù)據(jù):核心中的核心
# x軸標(biāo)簽(樣本名稱) labels = ['samp1', 'samp2', 'samp3', 'samp4', 'samp5'] # 各組數(shù)據(jù)的平均值(柱子高度) 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] # 各組數(shù)據(jù)的誤差范圍(誤差棒長度) 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:每組數(shù)據(jù)的平均值,決定了柱子的高度;xxx_errors:每組數(shù)據(jù)的誤差值(比如標(biāo)準(zhǔn)差、標(biāo)準(zhǔn)誤),決定了誤差棒的長度。
小提示:這里的數(shù)據(jù)是示例,你可以替換成自己的實(shí)際數(shù)據(jù),注意保持列表長度一致(比如有 5 個(gè)樣本,每個(gè)列表都要有 5 個(gè)元素)。
3. 設(shè)置坐標(biāo)軸和柱寬
x = np.arange(len(labels)) # 生成x軸刻度位置:[0, 1, 2, 3, 4] width = 0.2 # 柱子的寬度
np.arange(len(labels)):根據(jù)樣本數(shù)量生成連續(xù)的整數(shù)(比如 5 個(gè)樣本就是[0,1,2,3,4]),作為 x 軸的 “基準(zhǔn)位置”;width:每個(gè)柱子的寬度,后續(xù)會(huì)用它來調(diào)整多組數(shù)據(jù)的位置(避免柱子重疊)。
4. 創(chuàng)建圖形和軸
fig, ax = plt.subplots()
fig:代表整個(gè)圖表窗口(可以理解為 “畫布”);ax:代表圖表中的坐標(biāo)軸(可以理解為 “繪圖區(qū)域”),后續(xù)的繪圖操作主要通過ax實(shí)現(xiàn)。
5. 繪制帶誤差棒的柱狀圖(關(guān)鍵步驟)
# 繪制A組:x軸位置在基準(zhǔn)位置左側(cè)(x - width) rects1 = ax.bar(x - width, A_means, width, yerr=A_errors, label='A', color='#66c2a5', capsize=5) # 繪制B組:x軸位置在基準(zhǔn)位置(x) rects2 = ax.bar(x, B_means, width, yerr=B_errors, label='B', color='#fc8d62', capsize=5) # 繪制C組:x軸位置在基準(zhǔn)位置右側(cè)(x + width) rects3 = ax.bar(x + width, C_means, width, yerr=C_errors, label='C', color='#8da0cb', capsize=5)
這是最核心的一行代碼,ax.bar() 用于繪制柱狀圖,參數(shù)含義:
x - width/x/x + width:三組柱子的 x 軸位置(錯(cuò)開排列,避免重疊);A_means/B_means/C_means:柱子的高度(平均值);width:柱子寬度(前面定義的0.2);yerr=xxx_errors:誤差棒的關(guān)鍵參數(shù),指定 y 軸方向的誤差范圍(如果需要 x 軸誤差棒,用xerr);label:每組數(shù)據(jù)的名稱(用于圖例);color:柱子顏色(這里用了美觀的 RGB 色值,可自行替換);capsize=5:誤差棒頂部 / 底部的 “帽子” 大?。ㄗ屨`差棒更美觀,避免變成一條細(xì)線)。
小技巧:如果有更多組數(shù)據(jù)(比如 D 組),可以繼續(xù)調(diào)整位置(x + 2*width),同時(shí)注意控制總寬度不要超過刻度間隔哦~
6. 添加標(biāo)簽、標(biāo)題和圖例
ax.set_xlabel('Samples') # x軸名稱
ax.set_ylabel('RMSE (m)') # y軸名稱(根據(jù)你的數(shù)據(jù)修改,比如“準(zhǔn)確率”“平均值”)
ax.set_title('Comparison of RMSE Across Samples') # 圖表標(biāo)題
ax.set_xticks(x) # 設(shè)置x軸刻度位置為基準(zhǔn)位置
ax.set_xticklabels(labels) # 用樣本名稱替換x軸刻度(默認(rèn)是0,1,2...)
ax.legend() # 顯示圖例(區(qū)分不同組數(shù)據(jù))這些參數(shù)用于完善圖表信息,讓讀者能快速理解圖表內(nèi)容。
7. 美化圖表
ax.yaxis.grid(True) # 添加y軸網(wǎng)格線(方便讀取具體數(shù)值)
ax.set_facecolor('white') # 設(shè)置圖表背景為白色(默認(rèn)可能是淺灰色)簡單的美化能讓圖表更清晰,網(wǎng)格線尤其適合需要精確讀數(shù)的場(chǎng)景。
8. 顯示圖表
plt.tight_layout() # 自動(dòng)調(diào)整布局,避免標(biāo)簽被截?cái)啵ū热鐦?biāo)題、軸標(biāo)簽超出窗口) plt.show() # 顯示圖表窗口
plt.tight_layout()是個(gè)非常實(shí)用的函數(shù),能自動(dòng)調(diào)整圖表元素的位置,避免標(biāo)簽重疊或被截?cái)啵?/li>plt.show()用于在屏幕上顯示繪制好的圖表。
五、代碼實(shí)現(xiàn)
如下圖所示:

六、總結(jié)
帶誤差棒的柱狀圖是數(shù)據(jù)可視化中非常實(shí)用的工具,今天我們用 matplotlib 實(shí)現(xiàn)了它,核心步驟包括:
- 準(zhǔn)備數(shù)據(jù)(平均值 + 誤差值);
- 設(shè)置坐標(biāo)軸和柱寬;
- 用
ax.bar()繪制柱狀圖,通過yerr參數(shù)添加誤差棒; - 完善標(biāo)簽、標(biāo)題和圖例;
- 美化并顯示圖表。
只要理解了每一步的邏輯,你就能輕松修改代碼,適配自己的數(shù)據(jù)集??烊ピ囋囉米约旱臄?shù)據(jù)生成圖表吧!
到此這篇關(guān)于使用Python輕松繪制帶誤差棒的柱狀圖的文章就介紹到這了,更多相關(guān)Python繪制柱狀圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python如何實(shí)現(xiàn)xml解析并輸出到Excel上
本文介紹了如何使用Python的ElementTree模塊解析XML文件,并將解析后的數(shù)據(jù)寫入Excel文件,通過編寫XML文件、解析XML、編寫將數(shù)據(jù)寫入Excel的函數(shù),最終實(shí)現(xiàn)XML數(shù)據(jù)到Excel的轉(zhuǎn)換2025-02-02
Pycharm安裝scrapy及初始化爬蟲項(xiàng)目的完整步驟
因?yàn)槿腴Tpython以來一直使用pycharm,所以對(duì)著黑白的DOS不習(xí)慣,所以此次來實(shí)現(xiàn)使用pycharm進(jìn)行實(shí)現(xiàn)使用scrapy框架,下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝scrapy及初始化爬蟲項(xiàng)目的完整步驟,需要的朋友可以參考下2022-08-08
使用python把Excel中的數(shù)據(jù)在頁面中可視化
最近學(xué)習(xí)數(shù)據(jù)分析,感覺Python做數(shù)據(jù)分析真的好用,下面這篇文章主要給大家介紹了關(guān)于如何使用python把Excel中的數(shù)據(jù)在頁面中可視化的相關(guān)資料,需要的朋友可以參考下2022-03-03
matplotlib之pyplot模塊之標(biāo)題(title()和suptitle())
這篇文章主要介紹了matplotlib之pyplot模塊之標(biāo)題(title()和suptitle()),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02

