Matplotlib figure facecolor (color de fondo)

91

¿Alguien puede explicar por qué el código siguiente no funciona al configurar el color de la cara de la 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.

Cuando especifico la altura y el ancho de la figura con fig1.set_figheight(11) fig1.set_figwidth(8.5)estos, el comando los selecciona plt.savefig("trial_fig.png"). Sin embargo, la configuración del color de la cara no se recupera. ¿Por qué?

Gracias por tu ayuda.

Curious2learn
fuente

Respuestas:

130

Es porque savefiganula el color de la cara para el fondo de la figura.

(Esto es deliberado, en realidad ... La suposición es que probablemente querrás controlar el color de fondo de la figura guardada con el facecolorkwarg a savefig. ¡Sin embargo, es un valor predeterminado confuso e inconsistente!)

La solución alternativa más fácil es simplemente hacer fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none')(estoy especificando el color del borde aquí porque el color del borde predeterminado para la figura real es blanco, lo que le dará un borde blanco alrededor de la figura guardada)

¡Espero que ayude!

Joe Kington
fuente
30

Tuve que usar la palabra clave transparente para obtener el color que elegí con mi inicial

fig=figure(facecolor='black')

Me gusta esto:

savefig('figname.png', facecolor=fig.get_facecolor(), transparent=True)
Labibah
fuente
4
¿Por qué lo usa transparent=Truesi proporciona un facecolor?
Alexis.Rolland
27

savefigtiene su propio parámetro para facecolor. Creo que una forma aún más fácil que la respuesta aceptada es configurarlos globalmente solo una vez , en lugar de poner facecolor=fig.get_facecolor()cada vez:

plt.rcParams['axes.facecolor']='red'
plt.rcParams['savefig.facecolor']='red'
tozCSS
fuente
0

Si desea cambiar el color de fondo, intente esto:

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