2011-01-26 73 views
54

¿Puede alguien explicar por qué el código siguiente no funciona al configurar el color de la cara de la figura?Matplotlib figura facecolor (color de fondo)

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 se especifica la altura y la anchura de la figura usando fig1.set_figheight(11)fig1.set_figwidth(8.5) éstos son recogidos por el comando plt.savefig("trial_fig.png"). Sin embargo, la configuración del color de la cara no se recoge. ¿Por qué?

Gracias por su ayuda.

Respuesta

75

Es porque savefig anula el color de la cara para el fondo de la figura.

(Esto es deliberado, en realidad ... La suposición es que usted probablemente desea controlar el color de fondo de la figura guardada con el facecolor kwarg a savefig. Es un defecto confusa e inconsistente, sin embargo!)

la solución más fácil es sólo para hacer fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none') (estoy especificando el edgecolor aquí porque el edgecolor por defecto para la cifra real es de color blanco, el cual le dará un borde blanco alrededor de la figura salvado)

Espero que ayude!

+0

Gracias por la explicación! – Curious2learn

17

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

fig=figure(facecolor='black') 

así:

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

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

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