Arrays python-Matplotlib 3D输入格式Z(依赖)值

Arrays python-Matplotlib 3D输入格式Z(依赖)值,arrays,python-3.x,multidimensional-array,matplotlib,3d,Arrays,Python 3.x,Multidimensional Array,Matplotlib,3d,我有一个非常类似于这个问题的问题,但它只是部分解决了我的问题(最初的问题是.plot_surface()无法识别任何参数)。我要做的是绘制一个由两个参数组成的函数,这就是我所拥有的: fig = plt.figure() ax = fig.add_subplot(111, projection='3d') X,Y = np.meshgrid(positions[0],np.transpose(positions[1])) Z = data[0] Axes3D.plot_surface(X, Y,

我有一个非常类似于这个问题的问题,但它只是部分解决了我的问题(最初的问题是.plot_surface()无法识别任何参数)。我要做的是绘制一个由两个参数组成的函数,这就是我所拥有的:

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
X,Y = np.meshgrid(positions[0],np.transpose(positions[1]))
Z = data[0]
Axes3D.plot_surface(X, Y, Z)
这会引发此错误:

TypeError: plot_surface() missing 1 required positional argument: 'Z'
数据[0]是二维数组。(数据是二维阵列的列表)。位置是一个行向量和一个列向量的元组,所以第3行基本上是将位置重建为两个行向量,然后生成两个矩阵,一个用于X,一个用于Y值,正如我认为Axes3D.plot_surface()所要求的那样

我的问题是,即使Z是2D数组,.plot_surface()也拒绝将其识别为2D数组

编辑:我刚刚用以下方法确认Z确实是正确的形状:

if Z.shape == X.shape:
    print('Same shape')
    Axes3D.plot_surface(X, Y, Z)
所以我不知道为什么它不起作用。 即使我像这样用X表示Z(因为它没有抱怨X丢失或形状错误),它仍然会生气

Axes3D.plot_surface(X, Y, X)
编辑:通过查看示例和尝试,我终于让它起作用了。我几乎不认为这是解决了,因为我仍然不知道为什么一个方法工作,另一个不,我不想离开这个问题为后代。我是这样做的

surf = ax.plot_surface(X, Y, Z)

而不是“Axes3D.plotsurface()”。我不知道这项更改为什么会起作用,所以请仍然帮助我解决这个问题。

正如您所说,似乎正确的方法是通过axis对象(
ax
,在下面的代码中):

或者,您仍然可以使用
Axes3D
调用它,但需要将axis对象
ax
传递给它,如下所示:

Axes3D.plot_surface(ax, X, Y, Z)

这是一种正确的做法:但问题是我已经有了先前生成的数组。我以后可能会这样重写,但这不是我现在需要的。我不明白为什么它不能按原样绘制。我也遇到了这个问题——文档似乎建议您可以这样使用它,但您根本不能。如果执行
Axes3D.plot_surface(X=X,Y=Y,Z=Z)
操作,您将看到它缺少
self
。这似乎是1.0.0版的更改,让文档有点混乱。
Axes3D.plot_surface(ax, X, Y, Z)