Matplotlib figura facecolor (cor de fundo)

95

Alguém pode explicar por que o código abaixo não funciona ao definir o facecolor da figura?

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.

Quando eu especifico a altura e a largura da figura, fig1.set_figheight(11) fig1.set_figwidth(8.5)eles são captados pelo comando plt.savefig("trial_fig.png"). No entanto, a configuração facecolor não é selecionada. Por quê?

Obrigado pela ajuda.

Curious2learn
fonte

Respostas:

134

É porque savefigsubstitui a cor do rosto para o fundo da figura.

(Isso é proposital, na verdade ... A suposição é que você provavelmente deseja controlar a cor de fundo da figura salva com o facecolorkwarg para savefig. É um padrão confuso e inconsistente, no entanto!)

A solução mais fácil é apenas fazer fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(estou especificando a cor de edg aqui porque a cor de edg padrão para a figura real é branco, o que lhe dará uma borda branca em torno da figura salva)

Espero que ajude!

Joe Kington
fonte
30

Tive que usar a palavra-chave transparente para obter a cor que escolhi com minha inicial

fig=figure(facecolor='black')

como isso:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)
Labibah
fonte
4
Por que você usa transparent=Truese fornece um facecolor?
Alexis.Rolland
27

savefigtem seu próprio parâmetro para facecolor. Acho que uma maneira ainda mais fácil do que a resposta aceita é defini-los globalmente apenas uma vez , em vez de colocar facecolor=fig.get_facecolor()todas as vezes:

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'
tozCSS
fonte
1

Se você deseja alterar a cor de fundo, tente o seguinte:

plt.rcParams['figure.facecolor'] = 'white'
song.xiao
fonte