Combinando mayavi y matplotlib en la misma figura.

Estaré haciendo animaciones. En cada cuadro quiero contener una ttwig de mayavi obtenida con

mlab.pipeline.iso_surface(source, some other superfluous args) 

y un gráfico de matplotlib obtenido usando simplemente

 pylab.plot(args) 

Tengo guiones para hacer ambas cosas por separado, pero no tengo idea de cómo combinarlas en una sola figura. Quiero que el producto final sea una secuencia de comandos que contenga el código de las dos secuencias de comandos que tengo actualmente.

AFAIK, no hay una forma directa porque los backends utilizados son muy diferentes. No parece posible agregar ejes de mayavi.figure a mayavi.figure o viceversa.

Sin embargo, hay un “tipo de camino” al usar el 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() 

introduzca la descripción de la imagen aquí

Esta no es necesariamente la mejor manera posible de hacer las cosas, y también puede encontrar problemas de resolución (verifique el tamaño de la ventana de mayavi ). Sin embargo, hace el trabajo en la mayoría de los casos.

Sumado a la respuesta de DrV que me ayudó mucho, puede trabajar con la figura mlab para establecer la resolución antes de la captura de pantalla, como con el trazado por lotes:

 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)