Python 错误栏

Ammar Ali 2024年2月15日
Python 错误栏

本教程将讨论使用 Python 中 Matplotliberrorbar() 函数绘制带有误差线的数据。

Python 错误栏

有些值不是 100% 准确,它们包含一些误差,例如电阻器的值。电阻值具有 10% 的容差或误差。这意味着该值不准确,但它可以在 10% 的范围内变化。

Python 中的误差线用于绘制误差以及绘图中的数据点,以显示值中存在的误差。要在 Python 中绘制带有误差线的数据,我们可以使用 Matplotliberrorbar() 函数。

例如,让我们绘制一些随机数据并为每个值添加误差线。请参阅下面的代码。

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]

plt.errorbar(x_values, y_values, yerr=y_error)
plt.show()

输出:

带有误差线的数据

在这个例子中,我们只在 y 轴上添加了错误,但我们也可以在 x 轴上添加错误。上述输出中的条形图是垂直的,但在 x 轴错误的情况下,条形图将是水平的。

每个条的长度取决于用它指定的误差值。误差向量的大小应与数据向量相同。

errorbar() 函数有一个参数 fmt,它可以设置绘图中使用的线条的属性,例如线条样式、颜色和标记符号。

默认线条样式是实线,但我们可以将其更改为虚线 --、点划线 -. 或虚线:。默认颜色是蓝色,但我们可以将其更改为任何颜色,如绿色或红色,使用颜色的第一个字母,如 r 代表红色。

我们还可以添加一个标记符号,例如 o 代表圆形,d 代表菱形,而*代表星形标记。我们可以使用 ms 参数来更改标记的大小。

例如,让我们在上图中添加一个 x 轴误差并更改线型、颜色和标记。请参阅下面的代码。

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]
x_error = [0.5, 0.5, 0.5, 0.5]

plt.errorbar(x_values, y_values, yerr=y_error, xerr=x_error, fmt="--ro", ms=10)
plt.show()

输出:

更改误差线的线属性

我们还可以使用 markeredgecolormec 参数更改其他标记属性,例如使用 markeredgecolormec 参数更改标记面颜色,使用 markerfacecolormfc 使用 markeredgewidthmew 参数更改标记边缘宽度.

我们还可以更改误差线的属性,例如误差线的颜色、线宽、大写大小和大写厚度。默认情况下,误差线的颜色将与线条样式的颜色相同,但我们可以使用颜色名称或颜色名称的第一个字母并使用 ecolor 参数将其更改为任何颜色。

默认情况下,误差线的宽度将与线条样式的宽度相同,但我们可以使用 elinewidth 参数将其更改为任意宽度。默认情况下,cape 大小和厚度为零,但我们可以使用 capsizecapthick 参数将其更改为任何浮点值。

例如,让我们更改上面提到的误差线的属性。请参阅下面的代码。

import matplotlib.pyplot as plt

x_values = [1, 2, 3, 4]
y_values = [1, 2, 3, 4]
y_error = [0.9, 0.5, 0.75, 0.25]
x_error = [0.5, 0.5, 0.5, 0.5]

plt.errorbar(
    x_values,
    y_values,
    yerr=y_error,
    xerr=x_error,
    fmt="--ro",
    ms=10,
    ecolor="g",
    elinewidth=3,
    capsize=10,
    capthick=3,
)
plt.show()

输出:

改变误差线的属性

我们还可以使用 errorevery 参数隐藏某些点上的误差线。默认情况下,此参数的值为 1,但我们可以将其更改为整数值。例如,如果我们将 errorevery 参数的值设置为 2,误差线将出现在一半的点上。

作者: Ammar Ali
Ammar Ali avatar Ammar Ali avatar

Hello! I am Ammar Ali, a programmer here to learn from experience, people, and docs, and create interesting and useful programming content. I mostly create content about Python, Matlab, and Microcontrollers like Arduino and PIC.

LinkedIn Facebook