使用Mayavi制作3D图形,使用Matplotlib样式的轴

dol*_*sen 9 python matplotlib mayavi

我一直在使用Mayavi进行3D绘图,我可以绘制我想要的散点图,但似乎无法让Axes看起来合适.我发现以下的问题开始得到我所追求的内容,但没有详细说明.我想要一个像#1这样的3D散点图,但是看起来很漂亮的轴像#2(我已经嵌入了,但我没有足够的声誉).常规的Mayavi Axes不会削减它.获得Matplotlib有飞机的任何提示?

Eze*_*ick 2

一旦我们掌握了“窍门”,这实际上是非常简单的,而且我已经做过很多次了。

“技巧”是首先生成 mayavi 图,然后将其传输到 matplotlib 窗口中,您可以在其中使用所有熟悉的 matplotlib 工具来制作带有数字、日期、箭头或 matplotlib 提供的其他部分的轴。在此代码示例中,我将把 mayavi 'copper spheres' 示例放入 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()
Run Code Online (Sandbox Code Playgroud)

结果只是 matplotlib 轴集中的 mayavi 图: matplotlib 轴中的 Mayavi 图形

唯一棘手的部分是,如果您想要生成超过一两个手动构建的绘图,您需要建立有关 mayavi 和 matplotlib 的比例和尺寸的实用知识,以使两者一起缩放。这不是微不足道的,但对于 Mayavi 和 Matplotlib 来说都有相当详细的记录,并且从你都知道的事情的声音来看,所以我不会重复这些要点。(既然东西已经在 Matplotlib 中,您也可以将它们作为生成的 PDF 的一部分,或者使用 python-docx 将它们移植到 Microsoft Word 中)