使用matplotlib制作3D绘图

时间:2017-03-19 17:04:14

标签: python matplotlib plot 3d

试图制作一个常数(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绘图。

2 个答案:

答案 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()

制作以下情节

enter image description here

<小时/> [*]在这里确切;你可以调用类方法plot_wireframe,但是你需要为它提供像

这样的实例
Axes3D.plot_wireframe(ax, X, Y, Z)

答案 1 :(得分:1)

我在网上找到了this示例。 我已将其粘贴到您的代码示例中,我得到以下代码+情节:

DispatcherTimer

enter image description here

希望这有帮助!我用python 3.5运行它,使用spyder IDE。

干杯, 戴夫