繁体   English   中英

使用matplotlib制作3D图

[英]Using matplotlib to make 3D plot

只是试图制作一个常数(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是应有的2D数组,并且在使用matplotlib进行3D绘图时找不到很多有用的示例。

要点是不能Axes3D.plot_wireframe(X,Y,Z)运行Axes3D.plot_wireframe(X,Y,Z) 相反,您需要创建一个Axes3D实例并调用其方法[*]。 就像在2D情况下,您不会调用matplotlib.axes.Axes.plot(x,y)而是ax.plot(x,y) ,其中ax是例如通过fig.add_subplot创建的实例。

可以在此处找到线框图的示例。

以下代码(使用问题中的代码)

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) 

我在网上找到了这个例子。 我已经将其粘贴到您的代码示例中,并且得到了以下代码+图:

import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

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])))

fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

ax.plot_wireframe(X, Y, Z)

plt.show()

在此处输入图片说明

希望这可以帮助! 我使用spyder IDE在python 3.5上运行了它。

干杯,戴夫

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM