在matplotlib python中,从x轴查找与y轴对应的值
我试图做一些简单的工作,比如读取matplotlib中对应于y轴值的x轴值,但我看不出有什么问题 在这种情况下,我感兴趣的是,例如,如果我选择x=2.0,我会找到y轴的哪个值,但是我会得到在matplotlib python中,从x轴查找与y轴对应的值,python,numpy,matplotlib,Python,Numpy,Matplotlib,我试图做一些简单的工作,比如读取matplotlib中对应于y轴值的x轴值,但我看不出有什么问题 在这种情况下,我感兴趣的是,例如,如果我选择x=2.0,我会找到y轴的哪个值,但是我会得到idxtuple空,即使xvalues数组中有数字2 代码如下: pyplot.plot(x,y,linestyle='--',linewidth=3) ax = pyplot.gca() line = ax.lines[0] xvalues = line.get_xdata() yvalues = l
idx
tuple空,即使xvalues
数组中有数字2
代码如下:
pyplot.plot(x,y,linestyle='--',linewidth=3)
ax = pyplot.gca()
line = ax.lines[0]
xvalues = line.get_xdata()
yvalues = line.get_ydata()
idx = where(xvalues == 2.0)
y = yvalues[idx[0][0]]
这是xvalues
数组:
[1.40000000e+00 1.45000000e+00 1.50000000e+00 1.55000000e+00
1.60000000e+00 1.65000000e+00 1.70000000e+00 1.75000000e+00
1.80000000e+00 1.85000000e+00 1.90000000e+00 1.95000000e+00
2.00000000e+00 2.05000000e+00 2.10000000e+00 2.15000000e+00
2.20000000e+00 2.25000000e+00 2.30000000e+00 2.35000000e+00]
获取空数组的原因是严格值
2.0
实际上不存在于数组中
例如:
In [2]: x = np.arange(1.4, 2.4, 0.05)
In [3]: x
Out[3]:
array([ 1.4 , 1.45, 1.5 , 1.55, 1.6 , 1.65, 1.7 , 1.75, 1.8 ,
1.85, 1.9 , 1.95, 2. , 2.05, 2.1 , 2.15, 2.2 , 2.25,
2.3 , 2.35])
In [4]: x == 2.0
Out[4]:
array([False, False, False, False, False, False, False, False, False,
False, False, False, False, False, False, False, False, False,
False, False], dtype=bool)
In [5]: np.where(x == 2.0)
Out[5]: (array([], dtype=int64),)
这是一个经典的浮点数学限制。如果您愿意,您可以:
y[np.isclose(x, 2)]
但是,一般来说,您希望在给定的x处插值y值
例如,假设您希望值位于2.01
。该值在x阵列中不存在
相反,使用np.interp
进行线性插值:
In [6]: y = np.cos(x)
In [7]: np.interp(2.01, x, y)
Out[7]: -0.4251320075130563
您是否尝试过
idx=where(xvalues>=2.0)
?感谢您的回复。我试过了,事实上,即使idx输出了一堆值,尤其是当xvalues数组有很多元素时,这种方法也能起作用。但是我想知道是否有更优雅的解决方案。这似乎更优雅:其中(xvalues>=2.0)和(xvalues<3.0)
非常感谢乔!现在,这是有道理的。