Matplotlib 3D表面缺少一个必需的位置参数:“Z”。

4
我正在尝试制作类似于这个示例中的三维表面: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()

我认为我的代码与示例相似,但它不起作用。我得到了这个错误

类型错误:plot_surface()缺少1个必需的位置参数:“Z”

我该如何修复它?

1个回答

5
你只需要使用你的三维坐标对象来绘制。要做到这一点,请替换

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对象ax之后,还要使用Axes3D.plot_surface
附注:我(使用matplotlib版本2.2.2)也收到了警告:

griddata函数在版本2.2中已被弃用。

enter image description here


根据官方文档(https://matplotlib.org/1.5.3/mpl_toolkits/mplot3d/tutorial.html#getting-started),使用Axes3D是执行3D绘图的推荐方式。 - AmphotericLewisAcid
@ AmphotericLewisAcid:它说“对于那些使用旧版本matplotlib的人,请将ax = fig.add_subplot(111,projection ='3d')更改为ax = Axes3D(fig)。” 在这里,我认为OP已经在使用2+版本。 - Sheldore

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接