HOWTO · Matplotlib
Python Matplotlib 误差棒绘制方法
可以使用 Python 中 Matplotlib 的 errorbar() 函数绘制带有误差线的数据。
本页内容
使用 Matplotlib 的 errorbar() 函数绘制测量值及其不确定性:用 yerr 表示垂直方向的不确定性,用 xerr 表示水平方向的不确定性,也可以同时使用两者。以下示例使用固定数值,便于观察各参数如何改变图表。
Python 误差棒
误差棒表示绘图中某个测量值的不确定范围。例如,标有公差的电阻可能具有一系列取值,而不是一个保证准确的单一值。在图表中,误差棒会显示数据点周围的这一范围,但不会改变测量值本身。
运行此示例:
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()
这段代码绘制四个带有垂直误差棒的数据点。yerr 为每个对应的 y 值提供垂直误差范围。y_error 列表为每个点提供一个数值,因此其长度与绘图数据相对应。Matplotlib 也接受共用的标量误差范围,或由下限和上限组成的两行数组;每种形式都必须符合数据的形状要求。如果所有点的不确定性都相同且对称,可以使用标量;如果每个点的不确定性各自不同但仍对称,可以使用序列;对于非对称的不确定性,则可以分别指定下限和上限。图中使用的是固定列表,而非随机生成的测量值。
若还要显示水平方向的不确定性,请传入 xerr 值。下一个示例使用相同的四个固定数据点,并为每个点设置 0.5 的水平误差范围。生成的 x 轴误差棒呈水平方向,而 yerr 仍会绘制垂直误差棒。
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()
格式字符串 fmt="--ro" 将虚线(--)、红色(r)和圆形标记(o)组合在一起。你可以用 fmt 选择数据线的样式、颜色和标记;需要更精细的控制时,也可以使用单独的绘图选项。ms 选项设置标记大小。若要调整标记外观,mec(也称为 markeredgecolor)会更改轮廓颜色,mfc(也称为 markerfacecolor)会更改填充颜色,而 mew(也称为 markeredgewidth)会更改轮廓宽度。这些选项影响的是数据标记,而不是误差棒。
误差棒有单独的样式参数。ecolor 设置误差棒颜色,例如,ecolor="g" 会将误差棒设为绿色。elinewidth 控制误差棒线条的宽度。capsize 设置末端小横线的长度,capthick 控制其粗细。端帽标示误差棒的端点,不是数据标记。请根据图表的比例和视觉效果设置这些值,不要依赖未经确认的默认外观。
下面的示例将这些设置与相同的数据、线条和标记样式结合起来:
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 可以选择哪些数据点显示误差棒,同时保留绘制的数据线和标记。例如,errorevery=2 会从序列中的第一个点开始,每隔一个点显示误差棒。它只会改变误差棒的显示位置,不会改变底层数据或数据线。若要偏移选择位置,该参数可以是表示步长的整数,也可以是由起始位置和步长组成的一对值。
运行此示例,在保留数据线和圆形标记的同时,让误差棒显示在交替的数据点上:
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, fmt="-o", errorevery=2)
plt.show()
请根据数据所表达的信息选择选项:垂直测量值的不确定性使用 yerr,水平测量值的不确定性使用 xerr,两者都有不确定性时则同时使用。让每个误差值对应它所描述的数据点;对于非对称的不确定性,分别指定下限和上限;然后调整 fmt、标记选项和误差棒样式,以提高可读性。如果图表显得拥挤,可以使用 errorevery 减少显示的误差棒数量,而不丢弃绘制的数据点。