> Modules non standards > Matplotlib > Scatter plot
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