Python 将mayavi和matplotlib组合在同一个图中

Python 将mayavi和matplotlib组合在同一个图中,python,matplotlib,visualization,mayavi,Python,Matplotlib,Visualization,Mayavi,我将制作动画。在每一帧中,我想包含两个用 mlab.pipeline.iso_surface(source, some other superfluous args) 以及使用简单的 pylab.plot(args) 我有两个单独的脚本,但不知道如何将它们组合成一个图形。我希望最终产品是一个脚本,其中包含我当前拥有的两个脚本中的代码。好吧,没有直接的方法,因为使用的后端非常不同。似乎无法将matplotlib轴添加到mayavi.figure中,反之亦然 但是,通过使用mlab.screen

我将制作动画。在每一帧中,我想包含两个用

mlab.pipeline.iso_surface(source, some other superfluous args)
以及使用简单的

pylab.plot(args)

我有两个单独的脚本,但不知道如何将它们组合成一个图形。我希望最终产品是一个脚本,其中包含我当前拥有的两个脚本中的代码。

好吧,没有直接的方法,因为使用的后端非常不同。似乎无法将
matplotlib
轴添加到
mayavi.figure
中,反之亦然

但是,通过使用
mlab.screenshot
,有一种“方法”

import mayavi.mlab as mlab
import matplotlib.pyplot as plt

# create and capture a mlab object
mlab.test_plot3d()
img = mlab.screenshot()
mlab.close()

# create a pyplot
fig = plt.figure()
ax1 = fig.add_subplot(121)
ax1.plot([0,1], [1,0], 'r')

# add the screen capture
ax2 = fig.add_subplot(122)
ax2.imshow(img)
ax2.set_axis_off()


这不一定是最好的解决方法,您也可能会遇到解决问题(检查
mayavi
窗口的大小)。但是,在大多数情况下,它都能完成任务。

除了DrV的答案之外,您还可以使用mlab图形在屏幕截图之前设置分辨率,例如批量打印:

mfig = mlab.figure(size=(1024, 1024))
src = mlab.pipeline.scalar_field(field_3d_numpy_array)
mlab.pipeline.iso_surface(src)
iso_surface_plot = mlab.screenshot(figure=mfig, mode='rgba', antialiased=True)
mlab.clf(mfig)
mlab.close()

# Then later in a matplotlib fig:
plt.imshow(iso_surface_plot)

你知道提高屏幕截图分辨率的方法吗?@Dennis:我知道的唯一方法是使Mayavi绘图窗口尽可能大。当然,在屏幕上以尽可能高的分辨率进行此操作。(是的,我也希望将真正的矢量输出从Mayavi输入matplotlib。)@Dennis我添加了一个答案,其中包含可以添加到设置分辨率的代码。