本系列文章配套代码获取有以下两种途径:
-
通过百度网盘获取:
链接:https://pan.baidu.com/s/1jG-rGG4QMuZu0t0kEEl7SA?pwd=mnsj
提取码:mnsj
-
前往GitHub获取:
https://github.com/returu/Data_Visualization
函数语法:
plt.errorbar(x, y, yerr=None, xerr=None, fmt='', *,
ecolor=None, elinewidth=None, capsize=None,
barsabove=False, lolims=False, uplims=False,
xlolims=False, xuplims=False, errorevery=1,
capthick=None, data=None, **kwargs)
-
x:数组类数据,表示数据点的 x 坐标。
-
y:数组类数据,表示数据点的 y 坐标。
-
yerr:可选参数,数组类数据或 None,表示 y 方向的误差。若为标量,所有数据点的 y 误差相同;若为 1D 数组,每个数据点的 y 误差不同;若为 2D 数组,形状为 (2, n),表示每个点的下误差和上误差(不对称误差)。
-
xerr:可选参数,与yerr类似,但表示 x 方向的误差。
-
fmt:数据点/数据线的格式字符串。格式与plot()函数的格式字符串相同,如 ‘o-‘, ‘s–‘ 等。使用 ‘none’(不区分大小写)来绘制不带任何数据标记的误差棒。
-
ecolor:误差棒线条的颜色。如果为 None,则使用连接标记的线条的颜色。
-
elinewidth:误差棒线条的宽度。如果为 None,则使用当前样式(style)的线宽。
-
capsize:误差棒端帽(cap)的长度(以点为单位)。
-
barsabove:如果为 True,将在绘图符号的上方绘制误差棒。默认为下方。
-
lolims、uplims、xlolims、xuplims:这些参数用于指示某个值仅给出上限/下限。在这种情况下,会使用一个尖角符号 (^ 或 v) 来表示。其中,lolims/uplims参数对应 y 值的下限/上限,此时只会绘制向上/向下的箭头;xlolims/xuplims参数对应 x 值的下限/上限,此时只会绘制向右/向左的箭头。lims 参数可以是标量,也可以是与 xerr和 yerr长度相同的数组。
-
errorevery:在数据的子集上绘制误差棒。若errorevery = N表示在点 (x[::N], y[::N])上绘制误差棒;若errorevery = (start, N)表示在点 (x[start::N], y[start::N])上绘制误差棒。例如 errorevery=(6, 3)会在 (x[6], x[9], x[12], x[15], …)等位置添加误差棒。常用于当两个数据序列共享 x 轴值时,避免误差棒重叠。
-
capthick:关键字参数 markeredgewidth(又名 mew)的别名。控制误差条端点横线的粗细(单位:点)。若同时设置markeredgewidth,会覆盖capthick。
-
data:如果提供,以下参数也可以接受字符串 s,如果 s是 data中的键,则会被解释为 data[s]。
通过调整这些参数,可以灵活控制误差条图的视觉效果。
# 模拟数据
x = [20, 30, 40, 50, 60]
y = [1.2, 2.5, 3.8, 4.2, 5.1]
y_err = [0.2, 0.3, 0.25, 0.4, 0.35]
plt.figure(figsize=(10, 6))
# 绘制误差条图
plt.errorbar(
x, # x轴数据
y, # y轴数据
yerr=y_err, # y方向的误差范围
fmt='o-', # 样式控制
capsize=6, # 误差条两端帽子的长度(单位:点)
lolims=True, # 仅显示y轴误差的下限(只绘制向上的箭头)
linewidth=2, # 数据点连接线的宽度
elinewidth=5, # 误差条线条的宽度
markersize=12, # 数据点标记的大小
markerfacecolor='red', # 数据点标记的填充颜色
markeredgecolor='k', # 数据点标记的边缘颜色
markeredgewidth=2, # 数据点标记的边缘宽度
color='blue', # 数据点连接线的颜色
ecolor='purple' # 误差条的颜色
)
plt.title('基础误差条图')
plt.xlabel('X轴')
plt.ylabel('Y轴')
plt.show()
可视化结果如下图所示:

使用示例:
-
示例 1:双向误差条+非对称误差条
在某些场景中,数据的上下误差可能不相等(如产品重量的允许偏差为上限 0.5g,下限 0.3g),此时可通过二维数组设置不对称误差,第一行代表每个数据点的 “向下误差”,第二行代表 “向上误差”。另外,在需要同时展示 x 轴和 y 轴误差的场景(如物理实验中 “时间测量误差” 和 “距离测量误差”),可同时设置xerr和yerr参数,此时 x 轴与 y 轴将同时显示误差。
# 创建数据
x = np.linspace(0, 10, 10)
y = np.sin(x)
y_err = np.random.uniform(0.1, 0.3, size=10)
x_err = np.random.uniform(0.2, 0.4, size=10)
# 创建图形
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5))
# 子图1:双向误差条
ax1.errorbar(x, y,
xerr=x_err, # x方向的误差范围
yerr=y_err, # y方向的误差范围
fmt='o',
capsize=5,
capthick=2,
ecolor='red',
alpha=0.7,
label='数据点'
)
ax1.set_title('双向误差条')
ax1.legend()
# 子图2:非对称误差条
y_err_lower = [0.1, 0.2, 0.1, 0.3, 0.2, 0.1, 0.2, 0.3, 0.1, 0.2]
y_err_upper = [0.3, 0.4, 0.2, 0.5, 0.3, 0.4, 0.3, 0.4, 0.2, 0.3]
# 组合成非对称误差的二维数组([下限误差, 上限误差])
asymmetric_error = [y_err_lower, y_err_upper]
ax2.errorbar(x, y,
yerr=asymmetric_error, # 使用非对称误差(仅y方向)
fmt='s',
capsize=4,
ecolor='green',
alpha=0.7
)
ax2.set_title('非对称误差条')
plt.tight_layout()
plt.show()

-
示例 2:根据返回值修改样式
errorbar()函数返回一个 ErrorbarContainer 对象,该容器包含:
-
plotline: 代表数据点及连线的 Line2D 对象,可以修改颜色、线宽、标记样式等。常用方法包括set_color()、set_linewidth()、set_marker()等。
-
caplines: 一个包含误差线帽子的 Line2D 对象元组(通常有两个元素),需要通过循环遍历列表修改每个帽子的样式,常用方法包括set_color()、set_markersize()、set_markeredgewidth()等。
-
barlinecols: 一个包含绘制了水平和垂直误差线的 LineCollection 对象的元组,需要循环遍历修改线条颜色、样式、宽度等,常用方法包括set_color()、set_linestyle()、set_linewidth()等。
通过返回值修改样式的方法,比在errorbar()函数中直接设置参数更灵活,尤其适合需要对图表各部分进行精细调整的场景。例如,可以单独修改 x 轴和 y 轴误差条的样式,或者根据数据特征动态调整不同部分的外观。
# 生成示例数据
x = np.linspace(0, 10, 6)
y = np.sin(x)
yerr = 0.2 + 0.1 * np.sqrt(x)
xerr = 0.5 + 0.05 * x
# 创建2个子图
fig, (ax1, ax2) = plt.subplots(1, 2, figsize=(12, 5), dpi=100)
fig.suptitle('误差条图样式修改前后对比', fontsize=16, y=1.05)
# 第一个子图:原始样式
ax1.set_title('修改前', fontsize=14)
ax1.errorbar(
x, y,
xerr=xerr, yerr=yerr,
fmt='o-',
capsize=4
)
ax1.set_xlabel('X轴', fontsize=12)
ax1.set_ylabel('Y轴', fontsize=12)
ax1.grid(alpha=0.3)
# 第二个子图:修改后样式
ax2.set_title('修改后', fontsize=14)
plotline, caplines, barlinecols = ax2.errorbar(
x, y,
xerr=xerr, yerr=yerr,
fmt='o-',
capsize=4
)
# 修改数据线和数据点样式
plotline.set_color('#2c7fb8') # 数据线颜色
plotline.set_linewidth(2) # 数据线宽度
plotline.set_marker('D') # 数据点标记
plotline.set_markersize(8) # 数据点大小
plotline.set_markerfacecolor('#ff7f0e') # 数据点填充色
plotline.set_markeredgewidth(2) # 数据点边缘宽度
# 修改误差条帽子样式
forcapin caplines:
cap.set_color('#d95f02') # 帽子颜色
cap.set_markersize(20) # 帽子大小
cap.set_markeredgewidth(2) # 帽子线宽
# 修改误差条线条样式
for bar in barlinecols:
bar.set_color('#1b9e77') # 误差条颜色
bar.set_linestyle('-.') # 误差条线条样式
bar.set_linewidth(3) # 误差条线宽
ax2.set_xlabel('X轴', fontsize=12)
ax2.set_ylabel('Y轴', fontsize=12)
ax2.grid(alpha=0.3)
plt.tight_layout()
plt.show()

更多内容可以前往官网查看:
https://matplotlib.org/stable/


本篇文章来源于微信公众号: 码农设计师