Matplotlib 3D Surface缺少1个必需的位置参数:“ Z”

时间:2018-12-16 22:17:56

标签: python python-3.x matplotlib

我正尝试制作3D表面,就像本示例中一样:https://gis.stackexchange.com/questions/66367/display-a-georeferenced-dem-surface-in-3d-matplotlib

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d.axes3d import *
from matplotlib.mlab import griddata
from matplotlib import cm

data = np.random.random((20, 2))
z = np.random.randint(5, 30, 20)
x = data.T[0]
y = data.T[-1]
xi = np.linspace(min(x), max(x))
yi = np.linspace(min(x), max(y))
X, Y = np.meshgrid(xi, yi)

Z = griddata(x, y, z, xi, yi)

fig = plt.figure()
ax = Axes3D(fig)
ax.scatter3D(x, y, z, c=z)
Axes3D.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=1, antialiased=True)
plt.show()

我认为我的代码与示例相似,但是没有 工作。我收到此错误

  

TypeError:plot_surface()缺少1个必需的位置参数:“ Z”

我该如何解决?

1 个答案:

答案 0 :(得分:1)

您只需要使用3D轴对象进行绘制即可。为此,请替换

Axes3D.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=1, antialiased=True) 

通过

ax.plot_surface(X, Y, Z, rstride=1, cstride=1, cmap=cm.jet, linewidth=1, antialiased=True) 

即使在定义类型为Axes3D.plot_surface的对象ax之后,我什至不确定您为什么首先使用Axes3D

PS:我(使用matplotlib版本2.2.2)也收到了警告

  

在2.2版中不推荐使用griddata函数。

enter image description here