应该如何构建plot_surface的数组?

Ada*_*ała 7 matplotlib

我试图了解如何构建用于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]])
Run Code Online (Sandbox Code Playgroud)

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

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

Nie*_*els 1

如果我理解正确的话,你会尝试通过一组点来插值曲面。我认为plot_surface 不是正确的函数。但如果我错了请纠正我。我认为你应该寻找插值工具,可能是 scipy.interpolate 中的工具。然后可以使用plot_surface 绘制插值的结果。

plot_surface 能够根据 x、y 坐标在 3D 空间中绘制网格(带有 z 值)。x 和 y 的数组是由 numpy.meshgrid 创建的数组。

图面示例:

import pylab as plt
import numpy as np
from mpl_toolkits.mplot3d import Axes3D

plt.ion()

x = np.arange(0,np.pi, 0.1)
y = x.copy()
z = np.sin(x).repeat(32).reshape(32,32)

X, Y = np.meshgrid(x,y)

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
ax.plot_surface(X,Y,z, cmap=plt.cm.jet, cstride=1, rstride=1)
Run Code Online (Sandbox Code Playgroud)