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)