140 votes

Matplotlib figure facecolor (couleur de fond)

Quelqu'un peut-il expliquer pourquoi le code ci-dessous ne fonctionne pas lors du réglage de la couleur du visage de la figure ?

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.

Lorsque je spécifie la hauteur et la largeur de la figure à l'aide de la fonction fig1.set_figheight(11) fig1.set_figwidth(8.5) ceux-ci sont repris par la commande plt.savefig("trial_fig.png") . Cependant, le réglage de la couleur du visage n'est pas pris en compte. Pourquoi ?

Merci pour votre aide.

195voto

Joe Kington Points 68089

C'est parce que savefig Remplace la couleur d'arrière-plan de la figure.

(C'est délibéré, en fait...). L'hypothèse est que vous voudrez probablement contrôler la couleur de fond de la figure sauvegardée avec la fonction facecolor kwarg à savefig . C'est un défaut déroutant et incohérent, cependant !)

La solution de contournement la plus simple est simplement de faire fig.savefig('whatever.png', facecolor=fig.get_facecolor(), edgecolor='none') (Je spécifie la couleur du bord ici parce que la couleur du bord par défaut pour la figure réelle est le blanc, ce qui vous donnera un bord blanc autour de la figure sauvegardée).

J'espère que cela vous aidera !

49voto

oztalha Points 53

savefig a son propre paramètre pour facecolor . Je pense qu'un moyen encore plus facile que la réponse acceptée est de les définir de manière globale. juste une fois au lieu de mettre facecolor=fig.get_facecolor() à chaque fois :

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

45voto

Labibah Points 101

J'ai dû utiliser le mot-clé transparent pour obtenir la couleur que j'ai choisie avec mon initial

fig=figure(facecolor='black')

comme ça :

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

9 votes

Pourquoi utilisez-vous transparent=True si vous fournissez un facecolor ?

0voto

YOng Points 30

@Labihah

fig=figure(facecolor='black')

Ce qui me permet d'éviter la couleur de fond de la figure.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X