Personnalisation de la couleur et des styles
Introduction
Tous les tracés disponibles avec matplotlib sont livrés avec leurs styles par défaut. Bien que cela soit pratique pour le prototypage, notre graphique finalisé nécessitera une certaine dérogation aux styles par défaut. Vous devrez peut-être utiliser uniquement des niveaux de gris ou suivre un schéma de couleurs existant, ou plus généralement, un graphique visuel existant.
Les couleurs par défaut utilisées par matplotlib sont plutôt ternes. On peut avoir des figures qui suivent un schéma de couleurs prédéfini afin qu'elles s'intègrent bien dans un document ou une page Web. Plus pragmatique, on peut simplement avoir à faire des figures pour un document qui sera imprimé sur une imprimante noir et blanc.
Il existe plusieurs façons de définir les couleurs dans matplotlib. On peut citer :
- Triplets : Ces couleurs peuvent être décrites comme un triplet de valeur réelle - les composantes (rouge, bleue, verte) d'une couleur. Les composants doivent être dans l'intervalle [0, 1]. Ainsi, la syntaxe Python (1.0, 0.0, 0.0) codera un rouge pur et brillant, tandis que (1.0, 0.0, 1.0) apparaîtra en rose foncé.
- Quadruplets : Ceux-ci fonctionnent comme des triplets, et le quatrième composant définit une valeur de transparence. Cette valeur doit également être dans l'intervalle [0, 1]. Lors du rendu d'une figure dans un fichier image, l'utilisation de couleurs transparentes permet de créer des figures qui se fondent avec un arrière-plan. Cela est particulièrement utile lors de la création de figures qui se retrouveront sur une page Web.
- Noms prédéfinis : matplotlib interprétera les noms de couleurs HTML standard comme une couleur réelle. Par exemple, la chaîne red sera acceptée comme couleur et sera interprétée comme rouge vif. Quelques couleurs ont une lettre comme alias :
Alias |
Couleur |
b |
Blue (bleu) |
g |
Green (vert) |
r |
Red (rouge) |
c |
Cyan (cyan) |
m |
Magenta (magenta) |
y |
Yellow (jaune) |
k |
Black (noir) |
w |
White (blanc) |
- Chaînes de couleurs HTML : matplotlib peut interpréter les chaînes de couleurs HTML comme des couleurs réelles. Ces chaînes sont définies comme #RRGGBB où RR, GG et BB sont les valeurs à 8 bits pour les composants rouge, vert et bleu en hexadécimal. C'est-à-dire R ou G ou B peuvent prendre des valeurs hexadécimales de 0 à F. Par exemple pour le bleu pur le code sera #0000FF.
- Chaînes de niveau de gris : matplotlib interprétera une représentation sous forme de chaîne d'une valeur à virgule flottante comme une nuance de gris, telle que 0.75 pour un gris clair moyen.
Soit le script suivant :
import numpy as np
import matplotlib.pyplot as plt
def loi_normale(X, mu, sigma):
a = 1. / (sigma * np.sqrt(2. * np.pi))
b = -1. / (2. * sigma ** 2)
return a * np.exp(b * (X - mu) ** 2)
X = np.linspace(-6, 6, 1000)
for i in range(5):
Points_test = np.random.standard_normal(50)
mu, sigma = np.mean(Points_test), np.std(Points_test)
plt.plot(X, loi_normale(X, mu, sigma), color = '.75')
plt.plot(X, loi_normale(X, 0., 1.), color = 'k')
plt.show()
Dans cet exemple, on génère cinq ensembles de 50 échantillons à partir d'une distribution normale. Pour chacun des cinq ensembles, on trace la densité de probabilité estimée en gris clair. La densité de probabilité de distribution normale est indiquée en noir : la couleur est codée en utilisant le raccourci pour le noir, c'est-à-dire k.
Utilisation de couleurs personnalisées pour les graphiques à points
On peut contrôler les couleurs utilisées pour un nuage de points comme on le faisait pour un graphique en courbes. La fonction de nuage de points pyplot.scatter() offre deux options pour contrôler les couleurs des points via son paramètre de color ou son raccourci c:
- Couleur commune à tous les points : si le paramètre de couleur est une définition de couleur matplotlib valide, tous les points apparaîtront dans cette couleur.
- Couleur individuelle pour chaque point : Si le paramètre de couleur est une séquence d'une définition de couleur matplotlib valide, le ième point apparaîtra dans la ième couleur.
Dans le script suivant, on va afficher deux ensembles de points, A et B, tirés de deux distributions gaussiennes bivariées. Chaque ensemble a sa propre couleur. On appelle la fonction pyplot.scatter() deux fois, une fois pour chaque ensemble de points :
import numpy as np
import matplotlib.pyplot as plt
A = np.random.standard_normal((100, 2))
A += np.array((-1, -1)) # On centre la distribution au point <-1, -1>
B = np.random.standard_normal((100, 2))
B += np.array((1, 1)) # On centre la distribution au point <1, 1>
plt.scatter(A[:,0], A[:,1], color = '.25')
plt.scatter(B[:,0], B[:,1], color = '.75')
plt.show()