当前位置: 首页 > 知识库问答 >
问题:

Matplotlib savefig背景始终透明

穆季萌
2023-03-14

我似乎无法让savefig()在没有透明图形背景的情况下实际保存PNG文件。

这是阅读和尝试了所有以前发布的建议,回答,诅咒,也通过API文档很多次。都看了,还是得不到不透明的人物脸

我正在使用matplotlib和savefig创建一个PNG文件。(环境:macos-使用PY 3.7的最新anaconda模块)。

然而,我正在jupyter中尝试这个——所以希望它不是完全搞砸的东西,只是jupyter中的ipython是如何做到的——尽管我不明白这是怎么回事

我确实通读了之前的许多关于Savefig做自己的事情的性质(令人困惑的地狱)的帖子,并按照建议做了/尝试了一切(以及最新的Savefig api文档中写的)。

特别是,我尝试了以下所有方法,但都没有成功:

  • 在savefig()调用中指定facecolor(带/不带透明度)
  • 保存图。facecolor:我使用的样式mpl文件中的白色

保存图时,我的图形背景始终是透明的。

有人能告诉我这是什么吗我在这里失踪了???

这是我正在使用的,无论我做什么,它都会以透明的背景吐出图形。

特别是下面的第二次调用(使用savefig(…,transparent=False))将使轴不透明-但图形本身仍然是透明的!)

import numpy as np
import matplotlib as mpl
import matplotlib.style as style

a = np.array([-3.2, 0.1, 1.5, 3.3, 8.5])
b = np.array([1.1, 1.8, 1.95, 2.3, 4.3])
labels = ['a', 'bc', 'def', 'g', 'ggghhh']

stylefile = './util/plot_config/aqs_default.mplstyle'
# the file above does contain an entry of:
# savefig.facecolor: white
#
to_res = 1024
dpi = 100
inches = (to_res/dpi, to_res/dpi)

style.use(stylefile)
%matplotlib   

fig = mpl.figure.Figure(figsize=inches, dpi=dpi, facecolor='white')
ax = fig.subplots()

for x, y, l in zip(a,b,labels):
    ax.scatter(x,y,label=l)
ax.legend()
ax.set_xlabel('Some x')
ax.set_ylabel('Attenuation $\mu$ (cm$^{-1}$)')

ax.set_title('blah', y=1.03)
fig.suptitle('Linearity $\mu$')

# for me, _both_ calls below result in the figure having a transparent background:

fig.savefig('a.png', facecolor=fig.get_facecolor(), transparent=True)
fig.savefig('b.png', facecolor=fig.get_facecolor(), transparent=False)

共有2个答案

孙成益
2023-03-14

供任何有类似问题的人参考。

原因(和修复)原来是因为我正在创建一个将frameon设置为False的图形。实际上,我在使用的样式文件中将此设置为False。

frameon更改为True修复了该问题。

这一点令人困惑,从任何文档中都看不出很明显——以下是有关MPL github问题的一些背景信息:https://github.com/matplotlib/matplotlib/issues/14339

陈嘉荣
2023-03-14

不幸的是,从matplotlib 3.3开始,似乎不再支持frameon

我解决了透明度的问题,通过设置facecolor='白色',透明=False选项在saefig()

 类似资料:
  • 通过使用启用透明背景功能,可以使用自定义图片作为背景。 controller.setTransparentBackground( true );

  • 我在这里的要求是使我的孩子突出,而没有的白色背景-(因此AnchorPane需要透明),我如何实现这一点?

  • 问题内容: 我正在使用类似于以下代码的内容: 我希望这可以使背景的不透明度为0.4,文本的不透明度为100%。相反,它们都具有0.4的不透明度。 问题答案: 儿童遗传不透明。如果他们不这样做,那将会很奇怪和不便。 您可以为背景图像使用半透明的PNG文件,也可以为背景颜色使用RGBa(alpha表示)颜色。 例如,50%的黑色背景褪色:

  • 问题内容: 我有一个JLabel,可以在鼠标输入时更改其背景颜色。我的问题是我希望JLabel在鼠标退出后变得透明。 有没有我可以用来完成此任务的声明? 问题答案: 在德国,这是一个懒惰的假期,因此结合以下两个答案: 问题(实际上,我倾向于将其视为错误)是设置opaque属性不会触发适当的重绘。JComponent触发了change事件,但似乎没人在听:

  • 问题内容: 我有一个带有标签的窗口作为框架。我这样做是因为我想要背景图像。但是现在我在使用其他标签时遇到了麻烦。我用来实际标记事物的其他标签没有透明的背景。有没有办法使这些标签的背景透明? 问题答案: Tk中的透明背景不支持此功能。

  • 我遇到了让情节本身透明的方法,但是我如何让背景透明呢?没有Qt有办法做到这一点吗?我希望情节在背景窗口上,例如,假设我正在运行Chrome,我希望情节在chrome窗口上,其内容可见。