如何从具有透明背景的matplotlib中导出图?


108

我正在使用matplotlib制作一些图形,但是不幸的是,如果没有白色背景,我将无法导出它们。

带有白色背景的样地

换句话说,当我导出这样的绘图并将其放置在另一幅图像的顶部时,白色背景隐藏了其背后的内容,而不是让其显示出来。如何导出具有透明背景的图?

Answers:


177

使用savefig带有关键字参数的matplotlib 函数transparent=True将图像另存为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

当然,该图没有显示出透明度。这是使用ImageMagick display命令显示的PNG文件的屏幕截图。棋盘图案是通过PNG文件的透明部分可见的背景。

显示截图


2

Png文件可以处理透明度。因此,您可以使用此问题将图保存到图像文件中,而不是使用Matplotlib显示它,以便将图形另存为png文件。

如果要使所有白色像素透明,则还有另一个问题:使用PIL使所有白色像素透明吗?

如果您想将整个区域变成透明,那么会有一个问题:然后像这个问题一样使用PIL库Python PIL:如何在PNG中使区域透明?以使您的图表透明。


谢谢,但这无济于事。我确实知道png能够透明,但是matplotlib的输出却不透明。另外,您的建议仅涵盖您要删除矩形的情况。我希望保存情节并删除背景。
Cupitor

2
据我记得您设置的是png中的透明色。文件。将白色设置为透明色即可。
Stephane Rolland

我想255是白色的,当我选择它时,我的情节就迷了!
Cupitor

真奇怪 仅您的地块?黑色的图形以及黑色和蓝色曲线的单位也?
Stephane Rolland

1
有关于转向全白像素的透明度(不使用面具就像我挂你)这个问题stackoverflow.com/questions/765736/...
斯特凡·罗兰
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.