Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Matplotlib savefig背景始终透明 问题_Python_Python 3.x_Matplotlib - Fatal编程技术网

Python Matplotlib savefig背景始终透明 问题

Python Matplotlib savefig背景始终透明 问题,python,python-3.x,matplotlib,Python,Python 3.x,Matplotlib,我似乎无法让savefig()在没有透明图形背景的情况下实际保存PNG文件 这意味着已经阅读并尝试了之前发布、回答、诅咒的所有建议,并且多次浏览API文档。我都看过了,但还是不能得到不透明的人像 背景 我正在使用matplotlib和savefig创建一个PNG文件。(环境:macos-使用PY 3.7的最新anaconda模块) 我正在jupyter尝试这个,但是-所以希望它不是完全搞砸了,只有Ipyton在jupyter是如何做到的-虽然我不知道怎么会是这样 我确实阅读了之前许多关于save

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

这意味着已经阅读并尝试了之前发布、回答、诅咒的所有建议,并且多次浏览API文档。我都看过了,但还是不能得到不透明的人像

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

我正在jupyter尝试这个,但是-所以希望它不是完全搞砸了,只有Ipyton在jupyter是如何做到的-虽然我不知道怎么会是这样

我确实阅读了之前许多关于savefig在后台做自己的事情的帖子(令人困惑),并按照建议做了/尝试了所有事情(以及最新savefig api文档中所写的)

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

  • 在savefig()调用中指定facecolor(带/不带透明度)
  • savefig.facecolor:我使用的样式mpl文件中的白色
保存时,我的图形背景始终是透明的


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

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

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


供其他有类似问题的人参考

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

frameon
更改为True修复了该问题

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

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


我通过在
savefig()

中设置
facecolor='white',transparent=False
选项解决了透明度问题,您会遇到哪些错误?你试过绝对路径了吗?我一点也没有出错——代码中没有任何错误。问题是我的输出PNG文件总是有一个透明的图形背景,不管我做了什么,否则(使其变为白色)什么是
fig.get_facecolor()
print?fig.get_facecolor()返回图形的facecolor的颜色集(当我声明fig大约10行时得到设置)。。。它不打印任何东西。在这里,它告诉fig.savefig使用fig对象的facecolor,但查询fig以了解它的facecolor设置为什么。我想知道在您的情况下,
print(fig.get\u facecolor())
在屏幕上显示了什么。最好合并代码中的这一行,并报告问题中的结果。
savefig()得到了意外的关键字参数“frameon”,该参数从3.3开始不再受支持,并将在两个小版本后成为错误
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)