Marqueurs Matplotlib
Apprenez à utiliser et personnaliser les marqueurs Matplotlib en Python. Styles, taille, couleur, remplissage et contrôle point par point.
Les marqueurs sont les symboles que Matplotlib dessine à chaque point de données d'un graphique. Choisir le bon style de marqueur — et savoir comment le redimensionner, le recolorer et le remplir — peut faire la différence entre un graphique surchargé et un graphique qui communique clairement. Cette page couvre tous les styles de marqueurs disponibles dans Matplotlib, la façon de personnaliser leur apparence, et quand utiliser plot() plutôt que scatter() pour un contrôle point par point.
Qu'est-ce qu'un marqueur dans Matplotlib ?
Un marqueur est une forme rendue à chaque coordonnée (x, y) d'un graphique. Vous contrôlez la forme utilisée avec le paramètre marker (ou dans une chaîne de format). Les marqueurs sont indépendants de la ligne reliant les points de données — vous pouvez afficher l'un sans l'autre.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 5, 3, 7, 4]
# Line with markers
plt.plot(x, y, marker='o')
# Markers only — no connecting line
plt.plot(x, y, marker='s', linestyle='None')
plt.show()Tous les styles de marqueurs intégrés
Matplotlib est livré avec plus de 30 codes de marqueurs intégrés. Le tableau ci-dessous répertorie les plus couramment utilisés.
| Code du marqueur | Forme |
|---|---|
'o' | Cercle |
's' | Carré |
'D' | Losange |
'd' | Losange fin |
'^' | Triangle (haut) |
'v' | Triangle (bas) |
'<' | Triangle (gauche) |
'>' | Triangle (droite) |
'p' | Pentagone |
'h' | Hexagone 1 |
'H' | Hexagone 2 |
'8' | Octogone |
'*' | Étoile |
'+' | Plus |
'x' | Croix |
'X' | Croix pleine |
| `' | '` |
'_' | Ligne horizontale |
'.' | Point (petit point) |
',' | Pixel |
'1' | Tri-bas |
'2' | Tri-haut |
'3' | Tri-gauche |
'4' | Tri-droite |
'None' ou '' | Aucun marqueur |
Pour voir tous les marqueurs d'un coup, vous pouvez itérer sur matplotlib.markers.MarkerStyle.markers :
import matplotlib.pyplot as plt
import matplotlib.markers as mmarkers
print(list(mmarkers.MarkerStyle.markers.keys()))Utiliser des marqueurs dans un graphique linéaire
La fonction plot() accepte un argument marker. Il applique le même marqueur à chaque point de données.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
plt.plot(x, y, marker='o')
plt.xlabel('x')
plt.ylabel('y')
plt.title('Line plot with circle markers')
plt.show()Utiliser une chaîne de format
Au lieu de plusieurs arguments nommés séparés, vous pouvez combiner le style de ligne, la couleur et le marqueur en une seule chaîne de format : '[couleur][marqueur][style_de_ligne]'.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
# Red circles connected by a dashed line
plt.plot(x, y, 'ro--')
plt.title('Format string: red circles, dashed line')
plt.show()Composantes courantes d'une chaîne de format :
| Couleur | Marqueur | Style de ligne |
|---|---|---|
'r' rouge | 'o' cercle | '-' continu |
'g' vert | 's' carré | '--' tirets |
'b' bleu | '^' triangle | ':' pointillés |
'k' noir | '*' étoile | '-.' tiret-point |
'm' magenta | '+' plus | 'None' sans ligne |
Personnaliser l'apparence des marqueurs
Matplotlib expose quatre arguments nommés pour un contrôle fin des marqueurs :
| Paramètre | Ce qu'il contrôle |
|---|---|
markersize (ou ms) | Diamètre du marqueur en points |
markerfacecolor (ou mfc) | Couleur de remplissage du marqueur |
markeredgecolor (ou mec) | Couleur du bord du marqueur |
markeredgewidth (ou mew) | Largeur du bord du marqueur en points |
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
plt.plot(
x, y,
marker='o',
markersize=12,
markerfacecolor='gold',
markeredgecolor='navy',
markeredgewidth=2,
)
plt.title('Customized circle markers')
plt.show()Marqueurs creux
Définissez markerfacecolor='none' (chaîne en minuscules) pour ne dessiner que le bord, créant ainsi un marqueur creux :
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [3, 1, 4, 1, 5]
plt.plot(x, y, marker='s', markersize=14, markerfacecolor='none', markeredgecolor='steelblue', markeredgewidth=2)
plt.title('Hollow square markers')
plt.show()Style de remplissage
Le paramètre fillstyle contrôle quelle portion du marqueur est remplie. Les valeurs valides sont 'full', 'left', 'right', 'bottom', 'top' et 'none'.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [2, 4, 3, 5, 1]
plt.plot(x, y, marker='o', markersize=16, fillstyle='left', markerfacecolor='crimson', markeredgecolor='black')
plt.title('Half-filled circle markers (fillstyle="left")')
plt.show()Contrôle point par point des marqueurs avec scatter()
plot() applique un marqueur uniforme à toute la ligne. Lorsque vous avez besoin que chaque point ait une taille ou une couleur différente — par exemple pour encoder une troisième variable — utilisez scatter() à la place.
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5]
y = [10, 20, 15, 25, 30]
sizes = [40, 100, 200, 80, 160] # area in points²
colors = [0.2, 0.5, 0.8, 0.3, 0.9] # mapped through colormap
sc = plt.scatter(x, y, s=sizes, c=colors, cmap='plasma', edgecolors='black')
plt.colorbar(sc, label='Value')
plt.title('Per-point size and color with scatter()')
plt.show()Principales différences entre plot() et scatter() pour les marqueurs :
| Fonctionnalité | plot() | scatter() |
|---|---|---|
| Forme du marqueur | Identique pour tous les points | Identique pour tous les points |
| Taille du marqueur | Uniforme | Par point (array s) |
| Couleur du marqueur | Uniforme | Par point (array c + colormap) |
| Performance sur grands jeux de données | Plus rapide | Plus lente |
Plusieurs séries de données avec des marqueurs différents
Utilisez des appels plot() distincts pour attribuer un marqueur différent à chaque série, puis ajoutez une légende :
import matplotlib.pyplot as plt
months = [1, 2, 3, 4, 5, 6]
product_a = [120, 135, 110, 150, 140, 160]
product_b = [80, 95, 100, 90, 115, 130]
product_c = [60, 70, 65, 85, 90, 95]
plt.plot(months, product_a, marker='o', label='Product A')
plt.plot(months, product_b, marker='s', label='Product B')
plt.plot(months, product_c, marker='^', label='Product C')
plt.xlabel('Month')
plt.ylabel('Units sold')
plt.title('Monthly sales by product')
plt.legend()
plt.show()Marqueurs sans ligne de connexion
Passer linestyle='None' (ou ls='None') supprime la ligne et ne laisse que les marqueurs — créant en pratique un graphique de dispersion avec plot().
import matplotlib.pyplot as plt
x = [1, 2, 3, 4, 5, 6, 7, 8]
y = [3, 1, 4, 1, 5, 9, 2, 6]
plt.plot(x, y, marker='D', linestyle='None', color='darkorange', markersize=10)
plt.title('Diamond markers, no line')
plt.show()Ce schéma est utile lorsque l'ordre des points de données est important (en préservant l'ordre original de x) mais que vous ne souhaitez pas qu'une ligne suggère une tendance continue.
Conseils pratiques
- Adaptez le marqueur à la densité des données. Utilisez des marqueurs petits (
'.'ou',') lorsque vous tracez des milliers de points ; des formes plus grandes ('o','s') pour quelques mesures seulement. - Assurez le contraste. Sur fond blanc, un
markeredgecolorfoncé sur unmarkerfacecolorclair permet de garder chaque point visible même à petite taille. - Évitez de surcharger un seul graphique. Plus de cinq formes de marqueurs distinctes dans un même graphique rend la légende difficile à lire — envisagez des sous-graphiques ou la couleur seule.
- Utilisez
scatter()pour encoder une troisième variable. Des arrays de taille ou de couleur mappés sur une colormap communiquent une dimension supplémentaire sans ajouter de séries à la légende.
Sujets connexes
- Graphiques linéaires Matplotlib — personnaliser le style de ligne avec vos marqueurs
- Graphique de dispersion Matplotlib — contrôle de la taille et de la couleur par point
- Étiquettes Matplotlib — ajouter des étiquettes d'axes et des titres à vos graphiques
- Vue d'ensemble des tracés Matplotlib — un tour des principaux types de graphiques