【问题标题】:How to get the X, Y values from the given Z value after using interpolate.interp2d to plot a surface使用 interpolate.interp2d 绘制曲面后如何从给定的 Z 值中获取 X、Y 值
【发布时间】:2018-08-13 01:11:24
【问题描述】:

我有 x 和 y 数组来表示网格数据的行和列,其值在 z 2d 数组中。 我使用 interpolate.interp2d 绘制曲面图。 现在,我能够获得给定 x、y 值的 z 值,但我希望能够从给定 z 值中获得 x、y 值。

代码:

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy import interpolate

x = [0, 0.01, 0.02]
y = [0, 5e-05, 0.0001]
print(np.meshgrid(x, y))
xx, yy = np.meshgrid(x, y)
z = [[ 1.    ,      0.99990035,  0.99981654],
 [ 0.90849264,  0.85447203,  0.81382534],
 [ 0.82880434 , 0.76083003 , 0.71961281]]
f = interpolate.interp2d(x, y, z, kind='linear')
xnew = np.arange(x[0],x[2], 1e-6)
ynew = np.arange(y[0],y[2], 1e-6)

znew = f(xnew, ynew)
print(f(0.003,0.0006))
xnew,ynew=np.meshgrid(xnew,ynew)

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot_surface(xnew,ynew, znew,
                       cmap=cm.get_cmap('coolwarm'))

plt.show()

【问题讨论】:

  • 从图片中可以看出,给定某个 z 值,有无限多个点 (x,y) 具有该 z 值。所以有点不清楚你想要达到什么目的。
  • 我想要一个穿过给定表面的表面,表示对应于给定 z 值的 x,y 平面
  • 那不是一条线,而不是一个表面吗?
  • 它可以是一个曲面(例如(x,y) for x in [0,10] and y in [10,20]),它可以是一条线(例如y=2x+1),它可以是随机点(例如(1,3)(4,8))它可以是以上任意组合或无。如果没有关于函数f(x,y)->z的一些信息,绝对没有办法知道@

标签: python numpy matplotlib scipy interpolation


【解决方案1】:

当您绘制曲面时,您可以沿特定的z 值添加等高线图。为了从给定的 z 值中获取 x,y 值,ob 可以使用等高线的数据。

c = ax.contour(xnew,ynew,znew, [f(0.003,0.0006)])
line = c.allsegs[0][0]
print(line)

生成的line 是一个二维数组,x 值位于第一列,y 值位于第二列。

import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from mpl_toolkits.mplot3d import Axes3D
from scipy import interpolate

x = [0, 0.01, 0.02]
y = [0, 5e-05, 0.0001]
xx, yy = np.meshgrid(x, y)
z = [[ 1.    ,      0.99990035,  0.99981654],
    [ 0.90849264,  0.85447203,  0.81382534],
    [ 0.82880434 , 0.76083003 , 0.71961281]]

f = interpolate.interp2d(x, y, z, kind='linear')

xnew = np.arange(x[0],x[2], 1e-6)
ynew = np.arange(y[0],y[2], 1e-6)
znew = f(xnew, ynew)
print(f(0.003,0.0006))
xnew,ynew=np.meshgrid(xnew,ynew)

fig = plt.figure()
ax = fig.gca(projection='3d')

ax.plot_surface(xnew,ynew, znew,
                       cmap=cm.get_cmap('coolwarm'))

c = ax.contour(xnew,ynew,znew, [f(0.003,0.0006)])
line = c.allsegs[0][0]
print(line)
ax.view_init(elev=13, azim=18)
plt.show()

【讨论】:

    猜你喜欢
    • 2022-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-09-07
    • 2011-04-28
    • 1970-01-01
    相关资源
    最近更新 更多