Python matplotlib如何绘制含最小/最大/当前值的误差棒
问题:仅用Max/Min/Current三个值绘制指定误差棒
需求说明
实现仅传入3个数值即可绘制对应误差棒的效果,示例参数如下:
- Max = 20
- Min = 10
- Current = 15
预期效果参考:
原有代码问题
原有代码如下,运行结果不符合预期:
ax.errorbar([0,1], [10,20], yerr=15, fmt='o', color='black', ecolor='lightgray', elinewidth=3, capsize=0);
原有代码运行结果:
核心错误点:
- 对
ax.errorbar的参数逻辑理解偏差:函数第二个位置参数是标记点的y坐标(即Current值),不是误差范围的端点;yerr参数接收的是标记点到误差上下界的距离,不是当前值本身。 - 原代码传入了2组x、y坐标
[0,1]、[10,20],相当于绘制了两个独立的带误差棒的散点,而非单根从Min延伸到Max、中间标记Current的误差棒。
修正方案
首先计算误差长度:
- 下误差长度 = Current - Min
- 上误差长度 = Max - Current
yerr参数需传入二维结构,第一行为各点的下误差长度,第二行为各点的上误差长度;因为仅绘制单根误差棒,x坐标传入单个值即可。
完整可运行代码:
import matplotlib.pyplot as plt # 三个输入参数 Max = 20 Min = 10 Current = 15 fig, ax = plt.subplots() # 计算上下误差距离 lower_error = Current - Min upper_error = Max - Current ax.errorbar( x=0, y=Current, yerr=[[lower_error], [upper_error]], fmt='o', color='black', ecolor='lightgray', elinewidth=3, capsize=0 ) # 可选配置:隐藏x轴刻度,匹配示例视觉效果 ax.set_xticks([]) plt.show()
运行后即可得到预期效果:单根浅灰色竖线从Min值位置延伸到Max值位置,中间Current值位置显示黑色标记点。
内容的提问来源于stack exchange,提问作者TourEiffel
相关产品推荐
相关产品推荐

