Palette de couleurs personnalisée à l'aide de Python Matplotlib
- Utilisez Matplotlib pour créer une palette de couleurs personnalisée en Python
-
Utilisez la méthode
get_cmap()
de Matplotlib pour accéder aux cartes de couleurs et à leurs valeurs en Python -
Utilisez l’attribut
colors
de l’objetListedColormap
pour créer une palette de couleurs personnalisée en Python - Comment créer une palette de couleurs segmentée linéaire personnalisée en Python ?
- Conclusion
Les palettes de couleurs sont l’un des moyens les plus efficaces de montrer les variations entre les valeurs continues et discrètes dans un graphique. Cet article traite de la création d’une palette de couleurs personnalisée à l’aide de Matplotlib en Python.
Utilisez Matplotlib pour créer une palette de couleurs personnalisée en Python
La bibliothèque matplotlib
propose diverses palettes de couleurs intégrées. Cependant, supposons que vous souhaitiez manipuler des palettes de couleurs ou créer des palettes de couleurs personnalisées. Dans ce cas, vous pouvez le faire en utilisant la classe ListedColormap
ou la classe LinearSegmentedColormap
définie dans la bibliothèque matplotlib
.
Avant de créer des palettes de couleurs personnalisées, voyons d’abord comment nous pouvons accéder aux valeurs dans les palettes de couleurs Matplotlib pour comprendre l’implémentation des palettes de couleurs. Cela nous permettra de créer des palettes de couleurs personnalisées de notre choix.
Utilisez la méthode get_cmap()
de Matplotlib pour accéder aux cartes de couleurs et à leurs valeurs en Python
Il existe différentes palettes de couleurs définies dans le module Matplotlib. Chaque palette de couleurs a reçu son nom unique. On peut accéder à une palette de couleurs en utilisant la méthode get_cmap()
dans le module cm
de la bibliothèque matplotlib
.
La syntaxe de la méthode get_cmap()
est la suivante.
matplotlib.cm.get_cmap(name=None, lut=None)
- Le paramètre
name
accepte le nom de la palette de couleurs sous la forme d’une chaîne ou d’un objetColormap
défini dans le modulematplotlib.colors
. Sa valeur par défaut estNone
. Si nous ne spécifions aucune entrée pour le nom du paramètre, la méthodeget_cmap()
renvoie la palette de couleursviridis
. - Si une palette de couleurs avec le nom spécifié est définie dans la bibliothèque Matplotlib, la méthode
get_cmap()
renvoie une instanceColormap
. - La valeur par défaut du paramètre
lut
estNone
. Silut
n’est pasNone
, ce doit être un entier qui spécifie le nombre de couleurs dans la liste utilisée pour définir la palette de couleurs. - Si le
name
n’est pas une palette de couleurs valide et quelut
n’est pasNone
, la palette de couleurs est rééchantillonnée pour entrer les valeurslut
dans la table de recherche.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
cm.get_cmap("viridis", 8)
Production :
Le code ci-dessus a été exécuté dans le shell interactif du Jupyter Notebook. Si vous essayez de l’exécuter dans un IDE différent, vous pouvez ou non obtenir l’image ci-dessus en sortie.
La palette de couleurs retournée par la méthode get_cmap()
est appelable. Lorsque nous passons une valeur entre 0 et 1 à l’objet colormap, il renvoie une valeur RGBA.
Vous pouvez observer cela dans cet exemple.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
viridis = cm.get_cmap("viridis", 8)
print(viridis(0.56))
Production :
(0.122312, 0.633153, 0.530398, 1.0)
Utilisez l’attribut colors
de l’objet ListedColormap
pour créer une palette de couleurs personnalisée en Python
Pour créer un ListedColormap
personnalisé, voyons d’abord comment les couleurs sont stockées dans un ListedColormap
. Pour cela, nous pouvons utiliser l’attribut colors
de l’objet ListedColormap
.
Par exemple, viridis
est une ListedColormap
. Nous pouvons observer les valeurs de couleur en utilisant l’attribut colors de la palette de couleurs viridis
, comme le montre l’exemple suivant.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
viridis = cm.get_cmap("viridis", 8)
print(viridis.colors)
Production :
[[0.267004 0.004874 0.329415 1. ]
[0.275191 0.194905 0.496005 1. ]
[0.212395 0.359683 0.55171 1. ]
[0.153364 0.497 0.557724 1. ]
[0.122312 0.633153 0.530398 1. ]
[0.288921 0.758394 0.428426 1. ]
[0.626579 0.854645 0.223353 1. ]
[0.993248 0.906157 0.143936 1. ]]
Ici, vous pouvez voir que les couleurs sont stockées dans un tableau de Nx4
. Vous pouvez également accéder au nombre spécifié de lignes de ListedColormap
en appelant le nom de la palette de couleurs avec la séquence requise comme argument d’entrée, comme indiqué ci-dessous.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
viridis = cm.get_cmap("viridis", 8)
print(viridis(range(0, 8)))
Production :
[[0.267004 0.004874 0.329415 1. ]
[0.275191 0.194905 0.496005 1. ]
[0.212395 0.359683 0.55171 1. ]
[0.153364 0.497 0.557724 1. ]
[0.122312 0.633153 0.530398 1. ]
[0.288921 0.758394 0.428426 1. ]
[0.626579 0.854645 0.223353 1. ]
[0.993248 0.906157 0.143936 1. ]]
Comme vous pouvez le constater, un ListedColormap
est représenté à l’aide d’une liste. Ainsi, pour créer un ListedColormap
personnalisé en Python, il va falloir créer une liste qui représentera les couleurs du colormap.
Utiliser les noms de couleur pour créer une palette de couleurs personnalisée en Python
Nous pouvons créer une palette de couleurs personnalisée en utilisant la méthode ListedColormap()
. La syntaxe de la méthode ListedColormap()
est la suivante.
matplotlib.colors.ListedColormap(colors, name="from_list", N=None)
- Le paramètre
colors
prend un tableau ou une liste de noms de couleurs ou de valeurs numériques représentant les valeurs RGBA. - Le paramètre
name
permet de donner un nom spécifique à la palette de couleurs personnalisée créée. Il a une valeur par défautfrom_list
. - Le paramètre N indique le nombre d’entrées dans la palette de couleurs. Sa valeur par défaut est
None
. Lorsque N a la valeur None, il devrait y avoir une entrée de palette de couleurs pour chaque couleur dans la listecolors
.
Pour créer une palette de couleurs personnalisée à l’aide de la méthode ListedColormap()
et d’une liste de couleurs, vous pouvez transmettre les noms de quatre couleurs à la méthode ListedColormap()
. Il renverra un objet Colormap
.
Après cela, vous pouvez utiliser l’objet Colormap
pour tracer les données, comme indiqué ci-dessous.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.colors
xdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ydata = [x * x for x in xdata]
norm = plt.Normalize(1, 150)
cmap = ListedColormap(["darkorange", "gold", "lawngreen", "lightseagreen"])
c = np.linspace(0, 150, 12)
plt.scatter(xdata, ydata, c=c, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
Production :
Utiliser les valeurs RGBA pour créer une palette de couleurs personnalisée en Python
Au lieu d’utiliser les noms de couleurs, vous pouvez utiliser les tableaux avec des valeurs RGBA pour créer la palette de couleurs comme indiqué ci-dessous.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.colors
xdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ydata = [x * x for x in xdata]
norm = plt.Normalize(1, 150)
colorarray = [
[0.57647055, 0.4116, 0.27107143, 1],
[0, 0.4116, 0.27107143, 1],
[0.57647055, 0, 0.27107143, 1],
]
cmap = ListedColormap(colorarray)
c = np.linspace(0, 150, 12)
plt.scatter(xdata, ydata, c=c, cmap=cmap, norm=norm)
plt.colorbar()
plt.show()
Production :
Comment créer une palette de couleurs segmentée linéaire personnalisée en Python ?
Avant de créer des palettes de couleurs segmentées linéaires personnalisées, observons comment les valeurs de couleur sont stockées dans une palette de couleurs segmentée linéaire.
Les palettes de couleurs segmentées linéaires n’ont pas l’attribut color
. Cependant, nous pouvons appeler le nom de la palette de couleurs avec la séquence requise comme argument d’entrée pour observer les valeurs de couleur.
Par exemple, nous pouvons regarder les valeurs de couleur de la palette de couleurs cuivre
comme suit.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
copper = cm.get_cmap("copper", 8)
print(copper(range(0, 8)))
Production :
[[0. 0. 0. 1. ]
[0.17647055 0.1116 0.07107143 1. ]
[0.35294109 0.2232 0.14214286 1. ]
[0.52941164 0.3348 0.21321429 1. ]
[0.70588219 0.4464 0.28428571 1. ]
[0.88235273 0.558 0.35535714 1. ]
[1. 0.6696 0.42642857 1. ]
[1. 0.7812 0.4975 1. ]]
Qu’est-ce que cdict
dans Matplotlib en Python ?
La classe LinearSegmentedColormap
utilise des points d’ancrage entre lesquels les valeurs RGBA sont interpolées pour définir une palette de couleurs segmentée linéaire.
- Chaque point d’ancrage est spécifié comme une ligne dans une matrice de la forme
[x[i] yleft[i] yright[i]]
. Lex[i]
est l’ancre, etyleft[i]
etyright[i]
sont les valeurs de couleur de chaque côté du point d’ancrage. - Si la palette de couleurs présente des discontinuités aux points d’ancrage, les valeurs
yleft[i]
etyright[i]
auront des valeurs différentes. Sinon,yleft[i]
etyright[i]
ont la même valeur. - Les points d’ancrage sont stockés dans un dictionnaire de couleurs, souvent appelé
cdict
. Les clés du dictionnaire sontred
,green
, etblue
, et les valeurs correspondantes sont des points d’ancrage spécifiés sous forme de lignes dans une matrice de la forme[x[i] yleft[i] yright[i]]
. A chaque entrée d’uncdict
, la valeurx[i]
doit croître de manière monotone de 0 à 1.
Vous pouvez créer un dictionnaire de couleurs comme suit.
cdict = {
"blue": [[0.0, 0.0, 0.0], [0.5, 1.0, 1.0], [1.0, 1.0, 1.0]],
"red": [[0.0, 0.0, 0.0], [0.25, 0.0, 0.0], [0.75, 1.0, 1.0], [1.0, 1.0, 1.0]],
"green": [[0.0, 0.0, 0.0], [0.5, 0.0, 0.0], [1.0, 1.0, 1.0]],
}
Utiliser des points d’ancrage pour créer une palette de couleurs segmentée linéaire personnalisée en Python
Après avoir créé un cdict
, vous pouvez utiliser la méthode LinearSegmentedColormap()
pour créer une palette de couleurs linéaire segmentée. La syntaxe de la méthode LinearSegmentedColormap()
est la suivante.
matplotlib.colors.LinearSegmentedColormap(name, segmentdata, N=256, gamma=1.0)
- Le paramètre
name
indique le nom de la palette de couleurs. Ce doit être une chaîne. - Le paramètre
segmentdata
prend lecdict
comme argument d’entrée. - Le paramètre N indique le nombre de points dans la table de correspondance de palette de couleurs. Il a une valeur par défaut de 256.
- Le paramètre
gamma
désigne l’échelle utilisée pour les coordonnées x. Il a une valeur par défaut de 1,0.
Comme indiqué ci-dessous, nous pouvons créer une palette de couleurs linéaire segmentée en utilisant la méthode LinearSegmentedColormap()
.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.colors
xdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ydata = [x * x for x in xdata]
norm = plt.Normalize(1, 150)
cdict = {
"blue": [[0.0, 0.0, 0.0], [0.5, 1.0, 1.0], [1.0, 1.0, 1.0]],
"red": [[0.0, 0.0, 0.0], [0.25, 0.0, 0.0], [0.75, 1.0, 1.0], [1.0, 1.0, 1.0]],
"green": [[0.0, 0.0, 0.0], [0.5, 0.0, 0.0], [1.0, 1.0, 1.0]],
}
newcmp = LinearSegmentedColormap("testCmap", segmentdata=cdict, N=256)
c = np.linspace(0, 80, 12)
plt.scatter(xdata, ydata, c=c, cmap=newcmp, norm=norm)
plt.colorbar()
plt.show()
Production :
Utiliser les noms de couleur pour créer une palette de couleurs segmentée linéaire personnalisée en Python
Au lieu d’utiliser un cdict
, nous pouvons également utiliser une liste de couleurs pour créer une palette de couleurs personnalisée. Pour cela, nous pouvons utiliser la méthode LinearSegmentedColormap.from_list()
. La syntaxe de la méthode from_list()
est la suivante.
from_list(name, colors, N=256, gamma=1.0)
Ici, le paramètre colors
prend une liste de couleurs comme argument d’entrée. Tous les autres paramètres sont similaires à la méthode LinearSegmentedColormap()
.
Vous pouvez créer une palette de couleurs linéaire segmentée en utilisant la méthode from_list()
comme suit.
import numpy as np
import matplotlib.pyplot as plt
from matplotlib import cm
from matplotlib.colors import ListedColormap, LinearSegmentedColormap
import matplotlib.colors
xdata = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12]
ydata = [x * x for x in xdata]
norm = plt.Normalize(1, 150)
colorlist = ["darkorange", "gold", "lawngreen", "lightseagreen"]
newcmp = LinearSegmentedColormap.from_list("testCmap", colors=colorlist, N=256)
c = np.linspace(0, 80, 12)
plt.scatter(xdata, ydata, c=c, cmap=newcmp, norm=norm)
plt.colorbar()
plt.show()
Production :
Conclusion
Cet article a présenté différentes manières de créer une palette de couleurs personnalisée à l’aide de Matplotlib en Python. Nous avons créé des cartes de couleurs répertoriées et des cartes de couleurs segmentées linéaires et tracé certaines données à l’aide des cartes de couleurs.
Aditya Raj is a highly skilled technical professional with a background in IT and business, holding an Integrated B.Tech (IT) and MBA (IT) from the Indian Institute of Information Technology Allahabad. With a solid foundation in data analytics, programming languages (C, Java, Python), and software environments, Aditya has excelled in various roles. He has significant experience as a Technical Content Writer for Python on multiple platforms and has interned in data analytics at Apollo Clinics. His projects demonstrate a keen interest in cutting-edge technology and problem-solving, showcasing his proficiency in areas like data mining and software development. Aditya's achievements include securing a top position in a project demonstration competition and gaining certifications in Python, SQL, and digital marketing fundamentals.
GitHub