Matplotlib - savefig игнорирует цвет лица при сохранении с прозрачностью - PullRequest
0 голосов
/ 22 ноября 2018

Я был удивлен, обнаружив, что когда я использую savefig с transparent=True, это удаляет facecolor, который я мог установить.

Как не потерять цвета фона, которые я установил вручную (включая белый)?

Сравнить

Графический интерфейс пользователя

enter image description here

Использование transparent=False

plt.savefig('temp.pdf', format='pdf', transparent=False, bbox_inches='tight')

enter image description here

Использование transparent=True

plt.savefig('temp.pdf', format='pdf', transparent=True, bbox_inches='tight')

enter image description here

MWE

import matplotlib as mpl

rc_fonts = {
    "text.usetex": True,
    'text.latex.preview': True,
    "font.size": 50,
    'mathtext.default': 'regular',
    'axes.titlesize': 55,
    "axes.labelsize": 55,
    "legend.fontsize": 50,
    "xtick.labelsize": 50,
    "ytick.labelsize": 50,
    'figure.titlesize': 55,
    'figure.figsize': (10, 6.5),  # 15, 9.3
    'text.latex.preamble': [
        r"""\usepackage{lmodern,amsmath,amssymb,bm,physics,mathtools,nicefrac,letltxmacro,fixcmex}
        """],
    "font.family": "serif",
    "font.serif": "computer modern roman",
}
mpl.rcParams.update(rc_fonts)
import matplotlib.pylab as plt
from mpl_toolkits.axes_grid1.inset_locator import inset_axes, InsetPosition, mark_inset
from numpy import linspace, sin


x = linspace(0, 1, 100)
plt.clf()
ax1 = plt.gca()
ax2 = plt.axes([0, 0, 1, 1], label=str(2))
ip = InsetPosition(ax1, [0.08, 0.63, 0.45, 0.3])
ax2.set_axes_locator(ip)
ax1.plot(x, x)
ax1.plot(x, x + 0.3)
ax1.set_xlim(0, 1)
ax1.set_ylim(0, 1)
plt.setp(ax2.get_xticklabels(), backgroundcolor="white")
ax2.set_facecolor('grey')
ax1.set_yticks([])
ax1.set_xticks([])
ax2.set_yticks([])
ax1.text(0.3, 0.3, '$1$', transform=ax1.transAxes, horizontalalignment='center', verticalalignment='center', color='black', backgroundcolor='white')

Желаемый вывод

Мне бы хотелось, чтобы любой фоновый цвет по умолчанию был None (или аналогичный), такой, что если он не указан, то он будет прозрачным, а если он указан, то он будет соблюден и непрозрачен.Следовательно, я хотел бы следующий вывод (используя синий фон для большей ясности):

Что бы я хотел:

enter image description here

В настоящее времяесли я использую facecolor=(1,1,1,0), он корректно удаляет все цвета вокруг полей, но основная область графика остается белой.

1 Ответ

0 голосов
/ 23 ноября 2018

Похоже, что вы можете достичь желаемого выхода через

ax1.set_facecolor((1,1,1,0))
ax2.set_facecolor("grey")
fig.savefig(__file__+".pdf", facecolor=(1,1,1,0))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...