Can Mayavi portray a scene with a transparent background?

I am creating a grid using mayavi.mlab and want the background opacity to be 0. (or transparent). Is it possible?

+6
source share
2 answers

If your goal is to integrate the Mayavi figure into a matplotlib figure, this is possible. You can use mlab.screenshot to get an array with a zero RGBA value, and mlab will set the background pixels to have alpha 0 automatically. You can then add this RGBA matrix to the matlab shape using imshow . Example (adapted from here ):

 import numpy as np from mayavi import mlab import matplotlib.pyplot as plt # set up some plotting params dphi, dtheta = np.pi / 250.0, np.pi / 250.0 [phi, theta] = np.mgrid[0:np.pi + dphi * 1.5:dphi, 0:2 * np.pi + dtheta * 1.5:dtheta] m0, m1, m2, m3 = 4, 3, 2, 3 m4, m5, m6, m7 = 6, 2, 6, 4 r = np.sin(m0 * phi) ** m1 + np.cos(m2 * phi) ** m3 + \ np.sin(m4 * theta) ** m5 + np.cos(m6 * theta) ** m7 x = r * np.sin(phi) * np.cos(theta) y = r * np.cos(phi) z = r * np.sin(phi) * np.sin(theta) # do the meshplot fig = mlab.figure(size=(480, 340)) mlab.mesh(x, y, z, colormap='cool', figure=fig) imgmap = mlab.screenshot(figure=fig, mode='rgba', antialiased=True) mlab.close(fig) # do the matplotlib plot fig2 = plt.figure(figsize=(7, 5)) plt.imshow(imgmap, zorder=4) plt.plot(np.arange(0, 480), np.arange(480, 0, -1), 'r-') plt.savefig('example.png') 

mayavi meshplot composited onto matplotlib line graph

You can also just save the RGBA array directly to a file using plt.imsave(arr=imgmap, fname="foo.png")

+2
source

You cannot set transparency directly. However, you can save the shape with a background color (other than the foreground color) and use ImageMagick to remove the background

for instance

 mlab.figure(size = (1024,768),\ bgcolor = (1,1,1), fgcolor = (0.5, 0.5, 0.5)) # Your fantastic plotting script mlab.save('pure_beauty.png') 

now use ImageMagick to remove the background

 convert pure_beauty.png -transparent white pure_transparent_beauty.png 

as shown here .

+1
source

Source: https://habr.com/ru/post/969401/


All Articles