Подтвердить что ты не робот

Matplotlib figure facecolor (цвет фона)

Может кто-нибудь объяснить, почему приведенный ниже код не работает при настройке facecolor рисунка?

import matplotlib.pyplot as plt

# create figure instance
fig1 = plt.figure(1)
fig1.set_figheight(11)
fig1.set_figwidth(8.5)

rect = fig1.patch
rect.set_facecolor('red') # works with plt.show().  
                          # Does not work with plt.savefig("trial_fig.png")

ax = fig1.add_subplot(1,1,1)

x = 1, 2, 3
y = 1, 4, 9
ax.plot(x, y)

# plt.show()  # Will show red face color set above using rect.set_facecolor('red')

plt.savefig("trial_fig.png") # The saved trial_fig.png DOES NOT have the red facecolor.

# plt.savefig("trial_fig.png", facecolor='red') # Here the facecolor is red.

Когда я укажу высоту и ширину фигуры с помощью fig1.set_figheight(11) fig1.set_figwidth(8.5), они подбираются командой plt.savefig("trial_fig.png"). Тем не менее, настройка лица не подбирается. Почему?

Спасибо за вашу помощь.

4b9b3361

Ответ 1

Это потому, что savefig переопределяет facecolor для фона рисунка.

(Это преднамеренно, на самом деле... Предполагается, что вы, вероятно, хотите управлять цветом фона сохраненного рисунка с facecolor kwarg до savefig. Это запутанный и непоследовательный дефолт! )

Самое простое решение - просто сделать fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none') (здесь я указываю edgecolor, потому что по умолчанию edgecolor для фактического рисунка белый, что даст вам белую рамку вокруг сохраненной фигуры)

Надеюсь, что это поможет!

Ответ 2

Мне пришлось использовать прозрачное ключевое слово, чтобы получить цвет, который я выбрал, с моим первоначальным

fig=figure(facecolor='black')

вот так:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)

Ответ 3

savefig имеет свой собственный параметр для facecolor. Я думаю, что еще более простой способ, чем принятый ответ, - установить их глобально только один раз, вместо того чтобы помещать facecolor=fig.get_facecolor() каждый раз:

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'