Matplotlib figure facecolor (colore di sfondo)


95

Qualcuno può spiegare perché il codice seguente non funziona quando si imposta il colore del viso della 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 si specifica l'altezza e la larghezza della figura utilizzando fig1.set_figheight(11) fig1.set_figwidth(8.5)queste vengono raccolte dal comando plt.savefig("trial_fig.png"). Tuttavia, l'impostazione del colore del viso non viene rilevata. Perché?

Grazie per l'aiuto.

Risposte:


134

È perché savefigsostituisce il colore del viso per lo sfondo della figura.

(Questo è intenzionale, in realtà ... Il presupposto è che probabilmente vorresti controllare il colore di sfondo della figura salvata con facecolorkwarg su savefig. È un valore predefinito confuso e incoerente, però!)

La soluzione più semplice è solo da fare fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(sto specificando il colore del bordo qui perché il colore del bordo predefinito per la figura reale è bianco, che ti darà un bordo bianco attorno alla figura salvata)

Spero possa aiutare!


30

Ho dovuto usare la parola chiave trasparente per ottenere il colore che ho scelto con la mia iniziale

fig=figure(facecolor='black')

come questo:

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

4
Perché usi transparent=Truese fornisci un facecolor?
Alexis.Rolland

27

savefigha il proprio parametro per facecolor. Penso che un modo ancora più semplice della risposta accettata sia impostarli globalmente solo una volta , invece di metterli facecolor=fig.get_facecolor()ogni volta:

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

1

Se vuoi cambiare il colore di sfondo, prova questo:

plt.rcParams['figure.facecolor'] = 'white'
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.