Python: mplot3d 绘制立体图

2 投票
1 回答
5247 浏览
提问于 2025-04-16 08:19

我正在尝试绘制一个旋转体的线框图。我在参考一个关于球体的例子,链接在这里,但是我有点迷茫。我已经把所有内容简化了,但现在遇到了一个错误。我也在查看函数参数的说明,链接在这里,但除非我理解错了,否则这段代码应该没问题。我意识到我想画的是一条线,而不是一个形状,但我不明白为什么我不能用这种方法来画它。我想把这个例子尽量简化,这样我就可以继续绘制一个实际的立体图形。以下是我的代码:

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)

注意,在你给出的例子中,球体的网格点是通过外积来构建的。

撰写回答