Python: mplot3d 绘制立体图
我正在尝试绘制一个旋转体的线框图。我在参考一个关于球体的例子,链接在这里,但是我有点迷茫。我已经把所有内容简化了,但现在遇到了一个错误。我也在查看函数参数的说明,链接在这里,但除非我理解错了,否则这段代码应该没问题。我意识到我想画的是一条线,而不是一个形状,但我不明白为什么我不能用这种方法来画它。我想把这个例子尽量简化,这样我就可以继续绘制一个实际的立体图形。以下是我的代码:
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plot
import numpy
import pylab
fig = plot.figure()
ax = Axes3D(fig)
n = numpy.linspace(0, 100)
x = n
y = x**2
z = 1
ax.plot_wireframe(x, y, z)
plot.show()
这是我遇到的错误:
Traceback (most recent call last):
File "test.py", line 14, in <module>
ax.plot_wireframe(x, y, z)
File "/usr/lib/pymodules/python2.6/mpl_toolkits/mplot3d/axes3d.py", line 687, in plot_wireframe
rows, cols = Z.shape
AttributeError: 'int' object has no attribute 'shape'
1 个回答
3
当matplotlib用大写字母写数据参数时,这表示它期待的是数据矩阵。你可以使用meshgrid
这个函数(可以参考这个关于mplot3d
的例子)来生成网格。
from mpl_toolkits.mplot3d import Axes3D
import matplotlib.pyplot as plot
import numpy
import pylab
fig = plot.figure()
ax = Axes3D(fig)
n = numpy.linspace(0, 100)
x = n
y = x**2
X, Y = numpy.meshgrid(x, y)
Z = numpy.ones_like( X )
ax.plot_wireframe(X, Y, Z)
注意,在你给出的例子中,球体的网格点是通过外积来构建的。