试图制作一个常数(0)的3D图。所以我有
width = 1
dx = 0.1
X = np.arange(-width, width, dx)
Y = np.arange(-width, width, dx)
X, Y = np.meshgrid(X, Y)
Z = []
for i in range(len(X)):
Z.append(np.zeros(len(X[i])))
但是当我尝试运行Axes3D.plot_wireframe(X,Y,Z)
时,我得到plot_wireframe() missing 1 required positional argument: 'Z'
。我需要帮助理解为什么会这样,因为Z
是一个像它应该的二维数组,我找不到很多有用的例子,用matplotlib进行3D绘图。
答案 0 :(得分:1)
重点是你不能单独运行Axes3D.plot_wireframe(X,Y,Z)
。相反,您需要创建Axes3D的实例并调用其方法[*]。就像在2D情况下,您不会调用matplotlib.axes.Axes.plot(x,y)
但ax.plot(x,y)
,其中ax是创建的实例,例如通过fig.add_subplot
。
可以找到线框图的示例here。
以下代码(使用问题中的代码)
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
width = 1
dx = 0.1
X = np.arange(-width, width, dx)
Y = np.arange(-width, width, dx)
X, Y = np.meshgrid(X, Y)
Z = []
for i in range(len(X)):
Z.append(np.zeros(len(X[i])))
ax.plot_wireframe(X, Y, Z)
plt.show()
制作以下情节
<小时/> [*]在这里确切;你可以调用类方法
plot_wireframe
,但是你需要为它提供像这样的实例
Axes3D.plot_wireframe(ax, X, Y, Z)
答案 1 :(得分:1)
我在网上找到了this示例。 我已将其粘贴到您的代码示例中,我得到以下代码+情节:
DispatcherTimer
希望这有帮助!我用python 3.5运行它,使用spyder IDE。
干杯, 戴夫