Mis a jour le 2025-04-14, 12:10

Scatter plot

Scatter plot (nuage de points) :
  • x = [1, 2, 3, 4, 5]; y = [1, 2, 3, 4, 5]; pyplot.scatter(x, y).
  • on peut tracer deux nuages de points simultanément sur le même graphe :
x = [1, 2, 3, 4, 5] y1 = [1, 2, 3, 4, 5] y2 = [1, 4, 9, 16, 25] pyplot.scatter(x, y1, c = 'red') pyplot.scatter(x, y2, c = 'yellow')
Paramètres des scatter plots :
  • c = 'red' ou color = 'red' : la couleur des points (défaut est 'black').
  • edgecolor = 'none' : évite que le symbole soit entouré d'un trait noir.
  • s = 10 : taille du symbole au carré (le multiplier par 4 si on veut agrandir la taille d'un facteur 2). Le défaut est 20.
  • marker = 'o' : le type de symbole, ici un rond. Les principaux symboles sont les suivants :
    • 'o' : rond.
    • 's' : carré (square).
    • '+' : croix en forme de +.
    • 'x' : croix en forme de x.
    • '*' : étoile.
    • 'D' : losange (diamond).
    • 'd' : losange allongé.
    • 'H' : hexagone ('h' est aussi un hexagone, mais tourné).
    • 'p' : pentagone.
    • '.' : point.
    • '>' : triangle vers la droite ('<' pour vers la gauche).
    • 'v' : triangle vers le bas ('^' pour vers la haut).
    • '|' : trait vertical ('_' pour trait horizontal).
    • '1' : croix à 3 branches vers le bas ('2' vers le haut, '3' vers la gauche, '4' vers la droite).
  • attention, on peut donner une liste (avec autant d'éléments que de points) pour color et s, mais pas pour marker !
  • on peut aussi faire une gradation de couleurs en fonction de valeurs :
    • donner les valeurs dans le paramètre c (attention, pas color ici !)
    • donner une palette, avec éventuellement des valeurs minimales et maximales correspondant aux extrémités de la palette.
    • exemple : pyplot.scatter([1, 2, 3, 4], [4, 5, 6, 7], c = [1, 3, 2, 4], cmap = pyplot.cm.winter, marker = 'o', vmin = 1, vmax = 4)
Exemple : x = [1, 2, 3, 4, 5] y1 = [1, 2, 3, 4, 5] y2 = [1, 4, 9, 16, 25] y3 = [25, 16, 9, 4, 1] pyplot.scatter(x, y1, s = 130, c = 'yellow', marker = '*', edgecolors = 'green') pyplot.scatter(x, y2, s = 50, c = 'red', marker = '+', linewidth = 3) pyplot.scatter(x, y3, s = 50, c = 'cyan', marker = 'o', edgecolors = 'none') pyplot.title('scatter plot')
Ajout d'une ligne dans un scatter plot :
  • pyplot.plot([0, 5], [0, 10], color = 'red', linestyle = 'solid') : on fournit les coordonnées [x1, x2] et [y1, y2].
Les paramètres c (pour la couleur) et s (pour la taille) peuvent être :
  • soit un scalaire : c = 'red'.
  • soit une liste de la même taille que le nombre de points : c = ['red', 'green', 'blue'] si 3 points par exemple.
  • le paramètre marker ne peut par contre pas être une liste. Si on veut un symbole différent en fonction du point, on peut toujours faire un appel à scatter pour chaque point.
Exemple avec des paramètres variables : pyplot.scatter([0, 1, 2, 3, 4], [0, 2.4, 4.2, 5.6, 8.2], c = ['cyan', 'skyblue', 'blue', 'navy', 'black'], s = [110, 90, 70, 50, 30], marker = 'o', edgecolors = 'none') pyplot.plot([0, 4], [0, 8], color = 'red', linestyle = 'solid') pyplot.title('styles variables et droite')
Pour faire un scatter plot en coordonnées logarithmiques :
  • pyplot.xscale('log') : l'axe des x est en coordonnées logarithmiques (par défault avec facteur 10). Idem avec yscale pour l'axe des y.
  • attention : si il y a des valeurs non représentables (par exemple valeurs à 0), indiquer le range à représenter : pyplot.xlim(1, 1000) par exemple.
  • on peut choisir une base alternative pour les graduations : pyplot.xscale('log', basex = 2) (utiliser basey pour yscale).
  • pyplot.xscale('linear') : axe des x est linéaire.
  • pyplot.xscale('symlog', linthresh = 1) permet d'avoir une échelle logarithmique quand les valeurs sont plus grandes que 1 (en valeur absolue) et linéaire en deçà (sur [-1, 1] pour éviter les problèmes aux environs de 0).
  • avec échelle symlog : pyplot.gca().xaxis.set_minor_locator(matplotlib.ticker.SymmetricalLogLocator(base = 10.0, subs = numpy.arange(1.0, 10.0) * 0.1, linthresh = 0.1))
  • on peut afficher des ticks mineurs logarithmiques avec : pyplot.gca().xaxis.set_minor_locator(matplotlib.ticker.LogLocator(base = 10.0, subs = numpy.arange(1.0, 10.0) * 0.1, numticks = 10))
  • avec symlog, on peut afficher des ticks mineurs logarithmiques ou linéaires en fonction de l'endroit : pyplot.gca().xaxis.set_minor_locator(matplotlib.ticker.SymmetricalLogLocator(base = 10.0, subs = numpy.arange(1.0, 10.0) * 0.1, linthresh = 0.1))
Pour introduire du jitter (bruit) dans un scatter plot, pour pouvoir mieux distinguer les points :
def jitter(values, amount):
    return values + numpy.random.normal(0, amount * (max(values) - min(values)), len(values))
  

Copyright python-simple.com
programmer en python, tutoriel python, graphes en python, Aymeric Duclert