102 votes

Comment définir l'opacité de la couleur de fond du graphique avec Matplotlib

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.

156voto

Joe Kington Points 68089

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()

texte alternatif

30voto

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 :

description de l'image

et plt.savefig("temp.png") donne cette sortie :

description de l'image

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.

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