J'ai joué avec Matplotlib et je n'arrive pas à trouver comment changer la couleur de fond du graphique, ou comment rendre le fond complètement transparent.
Réponses
Trop de publicités?Si vous souhaitez simplement rendre l'arrière-plan transparent pour à la fois la figure et les axes, vous pouvez simplement spécifier transparent=True
lors de l'enregistrement de la figure avec fig.savefig
.
par exemple :
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot(range(10))
fig.savefig('temp.png', transparent=True)
Si vous souhaitez un contrôle plus précis, vous pouvez simplement définir la couleur de fond (facecolor) et/ou les valeurs alpha pour le patch de fond de la figure et des axes. (Pour rendre un patch complètement transparent, nous pouvons définir l'alpha à 0, ou définir la couleur de fond à 'none'
(en tant que chaîne de caractères, pas l'objet None
!))
par exemple :
import matplotlib.pyplot as plt
fig = plt.figure()
fig.patch.set_facecolor('blue')
fig.patch.set_alpha(0.7)
ax = fig.add_subplot(111)
ax.plot(range(10))
ax.patch.set_facecolor('red')
ax.patch.set_alpha(0.5)
# Si nous ne spécifions pas la couleur de contour (edgecolor) et la couleur de fond (facecolor) pour la figure lors
# de l'enregistrement avec savefig, cela remplacera la valeur que nous avons définie précédemment !
fig.savefig('temp.png', facecolor=fig.get_facecolor(), edgecolor='none')
plt.show()
Une autre façon est de définir les paramètres rcParams
globaux appropriés et simplement spécifier les couleurs. Voici un exemple minimal (J'ai utilisé le format de couleur RGBA pour spécifier l'alpha/opacité) :
import matplotlib.pyplot as plt
plt.rcParams.update({
"figure.facecolor": (1.0, 0.0, 0.0, 0.3), # rouge avec alpha = 30%
"axes.facecolor": (0.0, 1.0, 0.0, 0.5), # vert avec alpha = 50%
"savefig.facecolor": (0.0, 0.0, 1.0, 0.2), # bleu avec alpha = 20%
})
plt.plot(range(10))
plt.savefig("temp.png")
plt.show()
La figure.facecolor
est la couleur de fond principale et la axes.facecolor
est la couleur de fond du tracé réel. Pour une raison quelconque, plt.savefig
utilise savefig.facecolor
comme couleur de fond principale plutôt que figure.facecolor
, assurez-vous donc de modifier ce paramètre en conséquence.
plt.show()
du code ci-dessus donne la sortie suivante :
et plt.savefig("temp.png")
donne cette sortie :
Si vous voulez rendre quelque chose complètement transparent, il suffit de définir la valeur d'alpha de la couleur correspondante à 0. Pour plt.savefig
, il y a aussi une option "paresseuse" en réglant le paramètre rc savefig.transparent
sur True
, ce qui définit l'alpha de toutes les couleurs de fond à 0%.
Notez que modifier les rcParams
a un effet global, donc gardez à l'esprit que tous vos tracés seront affectés par ces changements. Cependant, cette solution peut être extrêmement utile si vous avez plusieurs tracés, ou si vous voulez changer l'apparence de tracés où vous ne pouvez pas changer le code source.