Python Matplotlib柱状图绘制实战:从基础到误差棒详解

小岛来信
小岛来信
发布时间:2026-10-14| 3人浏览过
原创

本文详解Python中Matplotlib库绘制各类柱状图的方法。涵盖普通垂直与水平柱图、堆积柱图以及带误差棒的并列与堆积柱图。通过具体代码示例,解析plt.bar、plt.barh及bottom参数的使用,帮助读者快速掌握不同场景下的图表绘制技巧。

Python柱状图绘制基础与进阶

前言

使用Python进行编程绘图其实十分便捷。无论是中学生、大学生还是研究生,均可通过系列教程从入门进阶至精通。本节将快速演示几种常见柱状图的绘制方法。

垂直与水平柱图实现

1 垂直柱图(普通柱图)

绘制普通垂直柱图的Python代码如下:

(左右滑动可以查看全部代码)


 # -*- coding:utf-8 -*-
 # 申明编码格式为utf-8
 
 import matplotlib as mpl
 import matplotlib.pyplot as plt
 mpl.rcParams["font.sans-serif"]=["SimHei"]
 #指定字体为SimHei,用于显示中文,如果Ariel,中文会乱码
 mpl.rcParams["axes.unicode_minus"]=False
#用来正常显示负号

x = [1,2,3,4,5,6,7,8]
y = [30,11,42,53,81,98,72,25]
#数据
abels=["A","B","C","D","E","F","G","H"]
#定义柱子的标签
plt.bar(x,y,align="center",color="rgb",tick_label=labels,hatch=" ",ec='gray')
#绘制纵向柱状图,hatch定义柱图的斜纹填充,省略该参数表示默认不填充。

#bar柱图函数还有以下参数:
#颜色:color,可以取具体颜色如red(简写为r),也可以用rgb让每条柱子采用不同颜色。
#描边:edgecolor(ec):边缘颜色;linestyle(ls):边缘样式;linewidth(lw):边缘粗细
#填充:hatch,取值:/,|,-,+,x,o,O,.,*
#位置标志:tick_label

plt.xlabel(u"样品编号")
plt.ylabel(u"库伦效率/%")

plt.show()

2 水平柱图

只需对前述代码进行少量调整,即可绘制出水平方向的柱状图。

(1)将第19行的“plt.bar”修改为“plt.barh”,即增加字母h以指定水平绘制。

(2)将第28和29行的“plt.xlabel”与“plt.ylable”中的x和y参数互换位置,以对应坐标轴标签。

最终得到的绘图效果如下:

堆积柱图绘制方法

3 堆积柱图

将第1点中代码的第14至21行调整如下:

(左右滑动可以查看全部代码)


x = [1,2,3,4,5,6,7,8]
y = [30,11,42,53,81,98,72,25]
y1= [45,23,44,67,88,89,65,75]
#数据
labels=["A","B","C","D","E","F","G","H"]
#定义柱子的标签
plt.bar(x,y,align="center",color="b",tick_label=labels,hatch=" ",ec='gray')
#绘制纵向柱状图,hatch定义柱图的斜纹填充,省略该参数表示默认不填充。
plt.bar(x,y1,align="center",color="g",tick_label=labels,hatch=" ",ec='gray',bottom=y)

绘制出的垂直堆积图效果如下:

上述第22行代码用于绘制y1第二组柱图。与第一组y柱图使用的plt.bar()函数不同,y1柱图的绘制参数中增加了bottom=y,即将柱图底部设置为第一组y值,从而实现y1在y上的堆积效果。至于水平堆积柱图的Python代码实现与上述逻辑类似。

并列与误差棒柱图应用

4 并列柱图

并列柱图,尤其是带有误差棒的柱图,是日常数据分析中最常用的图表类型之一。

完整代码如下:

(左右滑动可以查看全部代码)


# -*- coding:utf-8 -*-
# 申明编码格式为utf-8

import matplotlib as mpl
import matplotlib.pyplot as plt
import numpy as np

mpl.rcParams["font.sans-serif"]=["SimHei"]
#指定字体为SimHei,用于显示中文,如果Ariel,中文会乱码
mpl.rcParams["axes.unicode_minus"]=False
#用来正常显示负号

x = np.arange(8) #产生1~8的序列
#注意:这里使用numpy库,需要在程序开始时导包“import numpy as np”
y = [10,11,22,33,41,58,62,75]
std_err=[2,4,5,6,8,9,8,6] #误差棒
y1= [15,23,44,67,88,99,95,85]
std_err1=[1,2,1,2,1,2,3,2] #误差棒
#数据
error_attri = dict(elinewidth=1,ecolor="r",capsize=3)
#定义误差棒属性的字典数据。这三个参数分别定义误差棒的线宽、颜色、帽子大小
tick_label=["A","B","C","D","E","F","G","H"]
#定义柱子的标签
bar_width=0.35
#定义柱宽
plt.bar(x,y,bar_width,color="lightgreen",align="center",label="掺杂前",yerr=std_err,error_kw=error_attri)
#绘制纵向柱状图,hatch定义柱图的斜纹填充,省略该参数表示默认不填充。

plt.xticks(x+bar_width/2,tick_label)
plt.xlabel("样品编号")
plt.ylabel("降解率/%")
plt.legend()
plt.show()

5 堆积误差棒柱图

对前面第4点中的代码,修改第28至32行如下:


 plt.bar(x,y,color="g",align="center",label="掺杂前",yerr=std_err,error_kw=error_attri)
#绘制纵向柱状图,hatch定义柱图的斜纹填充,省略该参数表示默认不填充。
plt.bar(x,y1,bottom=y,color="y",align="center",label="掺杂后",yerr=std_err1,error_kw=error_attri)
plt.xticks(x,tick_label)

即可绘制出带有误差棒的堆积柱图,具体效果如下:

至此,关于Python绘图之柱形图绘制详解的介绍已告一段落。如需了解更多Python绘图相关内容,建议搜索本站过往文章或继续阅读后续相关文章,感谢大家的支持!

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。