matplotlib – 如何构建plot_surface的数组?

我试图了解如何构建用于plot_surface的数组(在Axes3d中).
我试图建立一个简单的表面来操纵那些数组的数据:

In [106]: x
Out[106]: 
array([[0, 0],
       [0, 1],
       [0, 0]])

In [107]: y
Out[107]: 
array([[0, 0],
       [1, 1],
       [0, 0]])

In [108]: z
Out[108]: 
array([[0, 0],
       [1, 1],
       [2, 2]])

但我无法弄清楚它们是如何被解释的 – 例如我的情节中z = 2中没有任何东西.
任何人都可以准确地解释哪些值将被用来制作点,哪一个用于行,最后用于表面.

例如,我想建立一个与线点连接的表面:
[0,0,0] – GT; [1,1,1] – > [0,0,2]
[0,0,0] – GT; [1,-1,1] – GT; [0,0,2]
以及这些线之间的表面.
plot_surface的数组应该是什么样的?

了解plot_surface中的网格是如何工作的并不容易.首先,我将给出一般性解释,然后我将解释如何在您的情况下转换数据.
如果您有一个N x值数组和一个M y值数组,则需要创建两个x和y值的网格(M,N).幸运的是numpy.meshgrid会有所帮助.困惑?看一个例子:

x = np.arange(3)
y=np.arange(1,5)
X, Y = np.meshgrid(x,y)

元素(x [i],y [j])被访问为(X [j,i],Y [j,i]).当然,它的Z值是Z [j,i],你还需要定义它.

话虽如此,您的数据确实产生了(0,0,2)表面的点,如预期的那样.实际上,该位置有两个点,来自坐标索引(0,0,0)和(1,1,1).

我附上绘制数组的结果:

fig = plt.figure()
ax=fig.add_subplot(1,1,1, projection='3d')
surf=ax.plot_surface(X, Y, Z)

enter image description here

相关文章
相关标签/搜索