Matplotlib рисунок 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"). Однако настройка facecolor не подобрана. Зачем?

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

3 60

3 ответа:

потому что savefig переопределяет цвет лица для фона фигуры.

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

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

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

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

fig=figure(facecolor='black')

такой:

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

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

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