我有一个问题与这个问题相似,但它只解决了部分问题(最初的问题是.plot_surface()不认可任何参数),我想要做的是绘制2个参数的函数图像,以下是我的代码:
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'
data[0]是一个二维数组,(data是一个二维数组的列表)。positions是一个行向量和列向量的元组,所以第3行本质上是将positions重构为两个行向量,并且制作两个矩阵,一个用于X值,一个用于Y值,因为我相信Axes3D.plot_surface()需要这样做。
我的问题是,即使Z是一个二维数组,.plot_surface()仍然不承认它是这种形式。
编辑:我刚刚证实了使用以下代码的正确形状:
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.plot_surface()"代替"Axes3D.plotsurface()"。我不知道为什么这个更改使其起作用,所以请帮助我弄清楚。
Axes3D.plot_surface(X=X,Y=Y,Z=Z)
,你会发现缺少self
。这似乎是版本1.0.0的变化,让文档有些混乱。 - OJFord