W3docs

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 marqueurForme
'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 :

CouleurMarqueurStyle 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ètreCe 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 marqueurIdentique pour tous les pointsIdentique pour tous les points
Taille du marqueurUniformePar point (array s)
Couleur du marqueurUniformePar point (array c + colormap)
Performance sur grands jeux de donnéesPlus rapidePlus 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 markeredgecolor foncé sur un markerfacecolor clair 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

Was this page helpful?