如何从 matplotlib 导出具有透明背景的地块?

我正在使用 matplotlib 制作一些图形,不幸的是,我不能导出没有白色背景他们。

sample plot with solid white background

换句话说,当我导出一个像这样的情节并将其放置在另一个图像之上时,白色背景会隐藏它背后的内容,而不是让它显示出来。如何导出具有透明背景的情节?

165472 次浏览

Png 文件可以处理透明性。 因此,您可以使用这个问题 将绘图保存到图像文件,而不是使用 Matplotlib 显示它,以保存您的图形作为一个 png文件。

如果你想把所有的白色像素都变透明,还有一个问题: 使用 PIL 使所有的白色像素透明?

如果你想把整个区域变成透明的,那么这里有一个问题: 然后像这个问题 Python PIL: 如何使 PNG 中的区域透明?一样使用 PIL 库,这样你的图就变得透明了。

使用带有关键字参数 transparent=True的 matplotlib savefig函数将图像保存为 png 文件。

In [30]: x = np.linspace(0,6,31)


In [31]: y = np.exp(-0.5*x) * np.sin(x)


In [32]: plot(x, y, 'bo-')
Out[32]: [<matplotlib.lines.Line2D at 0x3f29750>]


In [33]: savefig('demo.png', transparent=True)

结果: demo.png

当然,这个情节并没有显示出透明度。下面是使用 ImageMagickdisplay命令显示的 PNG 文件的屏幕快照。棋盘格模式是通过 PNG 文件的透明部分可见的背景。

display screenshot

提醒一下,plt.savefig ()应该写在 plt.show ()之前,否则将创建一个透明图像(没有实际的绘图)。

对于高质量的图像:

plt.savefig('filename.png', format='png', dpi='600', transparent=True)
plt.show()