gma*_*vel 11 python matplotlib
在某些情况下,当使用对数标度时,matplotlib会显示错误栏的错误.假设这些数据(例如在pylab中):
s=[19.0, 20.0, 21.0, 22.0, 24.0]
v=[36.5, 66.814250000000001, 130.17750000000001, 498.57466666666664, 19.41]
verr=[0.28999999999999998, 80.075044597909169, 71.322124839818571, 650.11015891565125, 0.02]
errorbar(s,v,yerr=verr)
Run Code Online (Sandbox Code Playgroud)
我得到一个正常的结果,但当我切换到对数比例时:
yscale('log')
Run Code Online (Sandbox Code Playgroud)
我得到的图表中看不到一些错误栏,尽管您仍然可以看到一些错误栏上限.(见下文.)为什么会发生这种情况,我该如何解决?

khy*_*yox 20
切换到对数刻度,但使用此命令:
plt.yscale('log', nonposy='clip')
Run Code Online (Sandbox Code Playgroud)
类似地,对于x轴:
plt.xscale('log', nonposx='clip')
Run Code Online (Sandbox Code Playgroud)
无论如何,如果你在过去的半年中得到了matplotlib的开发版本,默认情况下你会有这种剪切行为,如对于日志缩放y轴的Make nonposy ='clip'默认值中所讨论的.
Dan*_*Dan 12
问题是,对于某些点v-verr变为负值,值<= 0无法在对数轴上显示(log(x),x<=0未定义)为了解决这个问题,您可以使用非对称误差并强制结果值对于违规点大于零.
在错误大于值的任何点,verr>=v我们verr=.999v在这种情况下分配错误条将接近于零.
这是脚本
import matplotlib.pyplot as plt
import numpy as np
s=[19.0, 20.0, 21.0, 22.0, 24.0]
v=np.array([36.5, 66.814250000000001, 130.17750000000001, 498.57466666666664, 19.41])
verr=np.array([0.28999999999999998, 80.075044597909169, 71.322124839818571, 650.11015891565125, 0.02])
verr2 = np.array(verr)
verr2[verr>=v] = v[verr>=v]*.999999
plt.errorbar(s,v,yerr=[verr2,verr])
plt.ylim(1E1,1E4)
plt.yscale('log')
plt.show()
Run Code Online (Sandbox Code Playgroud)
这是结果
