如何按误差上下限而非误差长度绘制matplotlib errorbar误差棒
plt.errorbar() 传入绝对误差端点的实现方案 结论:不能直接传入误差棒的绝对端点值调用plt.errorbar()。
该方法的误差参数默认接收的是相对于测量点y值的偏移长度,而非坐标轴上的绝对端点坐标,但只需要一步简单的数值转换就能实现你需要的效果:
plt.errorbar()的非对称误差参数yerr要求传入形状为(2, N)的序列:第一组值是每个数据点向下延伸的误差长度(测量点y值到误差棒下端点的距离),第二组值是每个数据点向上延伸的误差长度(测量点y值到误差棒上端点的距离)。- 针对你给出的数据集,只需要提前计算出上下偏移量即可:
# 原始测量数据 x = [1, 2, 3, 4] y = [10, 9, 8, 7] # 误差棒绝对上下端点 y_lower = [6, 5, 3, 6.5] y_upper = [12, 10.5, 9, 7] # 转换为方法要求的偏移长度格式 down_err = [yi - yl for yi, yl in zip(y, y_lower)] up_err = [yu - yi for yi, yu in zip(y, y_upper)] yerr = [down_err, up_err]
转换完成后直接调用绘图方法即可,绘制出的误差棒就会严格落在你给定的y_lower到y_upper区间内:
import matplotlib.pyplot as plt # 绘制带误差棒的散点/折线,capsize设置误差棒端点横杠长度 plt.errorbar(x, y, yerr=yerr, fmt='o', capsize=4) plt.show()
注意:计算偏移量时如果出现负值,说明你给定的端点位置不符合
y_lower <= y <= y_upper的逻辑,误差棒会向反方向延伸,需要提前检查端点数据合理性。
内容的提问来源于stack exchange,提问作者Nikko Cleri
相关产品推荐
相关产品推荐

