使用Mayavi绘制3D图形,带Matplotlib风格坐标轴
1 个回答
2
其实这件事一旦掌握了“窍门”,就非常简单了,我已经做过很多次了。
这个“窍门”就是先生成mayavi的图,然后把它转移到matplotlib的窗口里,这样你就可以使用所有熟悉的matplotlib工具,比如添加数字、日期、箭头,或者其他matplotlib提供的功能。在这个代码示例中,我会把mayavi的“铜球”示例放到matplotlib的坐标轴里:
import numpy, pylab, mayavi, mayavi.mlab
import matplotlib.pyplot as plt
t = numpy.linspace(0, 4 * numpy.pi, 20)
cos,sin = numpy.cos, numpy.sin
x = sin(2 * t)
y = cos(t)
z = cos(2 * t)
s = 2 + sin(t)
mayavi.mlab.points3d(x, y, z, s, colormap="copper", scale_factor=.25)
arr = mayavi.mlab.screenshot()
fig = plt.figure(figsize=(5, 5))
pylab.imshow(arr)
plt.show()
结果就是在matplotlib的坐标轴中显示mayavi的图像:
唯一有点棘手的是,你需要对mayavi和matplotlib的比例和维度有一定的了解,这样才能让它们的比例协调一致,特别是如果你想制作多个手动构建的图形。这并不简单,但对于Mayavi和Matplotlib都有相当不错的文档说明,听起来你对这两者都很了解,所以我就不再多说了。(现在图形已经在Matplotlib里了,你可以把它们也放进生成的PDF里,或者用python-docx导入到Microsoft Word中)