Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在matplotlib python中,从x轴查找与y轴对应的值_Python_Numpy_Matplotlib - Fatal编程技术网

在matplotlib python中,从x轴查找与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

我试图做一些简单的工作,比如读取matplotlib中对应于y轴值的x轴值,但我看不出有什么问题

在这种情况下,我感兴趣的是,例如,如果我选择x=2.0,我会找到y轴的哪个值,但是我会得到
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)
非常感谢乔!现在,这是有道理的。