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

Scatterplots et lineplots

On part par exemple d'un dataframe comme :
df = pandas.DataFrame({'X': [1, 2, 3, 4, 5], 'Y': [1, 4, 9, 16, 25],
                       'Z': ['a', 'b', 'a', 'b', 'b'],
                       'T': ['A', 'A', 'A', 'B', 'B'], 'U': [20, 10, 10, 2, 10]})

  

Scatterplot

Scatterplot avec différentes catégories qui permettent de fixer : la couleur (hue), le style de points (style), et la taille (size, si variable numériques) :
  • avec tous les paramètres de catégories (la taille est normalisée), et en précisant la plage de variation des tailles :
df = pandas.DataFrame({'X': [1, 2, 3, 4, 5], 'Y': [1, 4, 9, 16, 25], 'Z': ['a', 'b', 'a', 'b', 'b'], 'T': ['A', 'A', 'A', 'B', 'B'], 'U': [20, 10, 10, 2, 10]}) seaborn.scatterplot(x = 'X', y = 'Y', hue = 'Z', style = 'T', size = 'U', sizes = (30, 200), data = df)
  • pour hue, si la valeur est numérique, utilise une échelle de couleurs, sinon utilise des couleurs discrètes.
  • s = 10 (et non size = 10) si on veut simplement ajuster la taille de tous les points (size est quand on veut faire varier la taille du point en fonction d'une variable).
  • hue_order = ['b', 'a'] : permet d'indiquer dans quel ordre faire figurer les variables.
  • hue_norm = (2, 20) : la plage dans laquelle on fait varier les couleurs quand la hue est quantitative.
  • palette = {'a': 'red', 'b': 'green'} : les couleurs à utiliser si hue a des valeurs discrètes.
  • palette = 'RdBu' : la palette de si hue a des valeurs continues.
  • legend = False : n'affiche pas la légende (on peut l'afficher ensuite à la main).
  • ax = myAxes : pour indiquer l'axe prédéfini sur lequel tracer le graphe.
  • pour les styles, on peut indiquer quel style utilisé pour chaque niveau :
df = pandas.DataFrame({'X': [1, 2, 3, 4, 5], 'Y': [1, 4, 9, 16, 25], 'Z': ['a', 'b', 'a', 'b', 'b'], 'T': ['A', 'A', 'A', 'B', 'B']}) seaborn.scatterplot(x = 'X', y = 'Y', hue = 'Z', style = 'T', palette = {'a': 'red', 'b': 'blue'}, markers = {'A': '+', 'B': 'x'}, s = 100, data = df)

Lineplot

Lineplot :
  • les points sont reliés par une ligne.
  • les valeurs de x sont d'abord triées avant de faire le tracé !
df = pandas.DataFrame({'X': [5, 2, 3, 4, 1], 'Y': [25, 4, 9, 16, 1]}) seaborn.lineplot(x = 'X', y = 'Y', data = df)
  • si il y a plusieurs valeurs identiques de x à chaque fois,la moyenne est calculée et l'intervalle de confiance à 95% va être tracé en utilisant un bootstraping (utiliser ci = None pour éviter cela)
  • estimator = numpy.median : utilise la valeur médiane plutôt que la moyenne.
df = pandas.DataFrame({'X': [5, 2, 3, 4, 1, 5, 2, 3, 4, 1], 'Y': [25, 4, 9, 16, 1, 10, 4, 6, 8, 2], 'Z': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b']}) seaborn.lineplot(x = 'X', y = 'Y', data = df)
  • on peut aussi utiliser la déviation standard au lieu de l'intervalle de confiance avec errorbar = 'sd'
df = pandas.DataFrame({'X': [1, 1, 2, 2, 3, 3, 4, 4, 5, 5], 'Y': [1, 2, 4, 7, 9, 12, 16, 18, 25, 20]}) seaborn.lineplot(x = 'X', y = 'Y', marker = 'o', errorbar = 'sd', err_style = 'bars', data = df, markersize = 20, markerfacecolor = 'red')
lineplot peut tracer plusieurs courbes, éventuellement avec des barres d'erreur si valeurs redondantes pour la même valeur de x :
  • lineplots multiples avec des barres d'erreur :
df = pandas.DataFrame({'X': [5, 2, 3, 4, 1, 5, 2, 3, 4, 4, 1, 1], 'Y': [25, 4, 9, 16, 1, 10, 4, 6, 8, 12, 2, 10], 'Z': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b']}) seaborn.lineplot(x = 'X', y = 'Y', hue = 'Z', marker = 'o', markersize = 10, errorbar = 'sd', err_style = 'bars', err_kws = {'capsize': 5, 'capthick': 2, 'elinewidth': 0.5}, data = df)
  • markersize (ou ms) est la taille des marqueurs.
  • capsize est la largeur des traits horizontaux des barres d'erreur (défaut = pas de trait horizontal).
  • capthick est l'épaisseur des traits horizontaux.
  • elinewidth est l'épaisseur des traits verticaux.
On peut tracer différentes courbes :
  • df = pandas.DataFrame({'X': [5, 2, 3, 4, 1, 5, 2, 3, 4, 4, 1, 1],
                           'Y': [25, 4, 9, 16, 1, 10, 4, 6, 8, 12, 2, 10],
                           'Z': ['a', 'a', 'a', 'a', 'a', 'b', 'b', 'b', 'b', 'b', 'b', 'b']})
        
  • de couleurs différentes avec hue = 'Z' : seaborn.lineplot(x = 'X', y = 'Y', hue = 'Z', data = df, palette = {'a': 'red', 'b': 'blue'}, hue_order = ['b', 'a'])
  • de styles différents avec style = 'Z' : seaborn.lineplot(x = 'X', y = 'Y', style = 'Z', data = df, markers = {'a': 'o', 'b': 'D'}, dashes = {'a': (3, 0), 'b': (2, 2)}, style_order = ['b', 'a'])
  • les valeurs de dashes sont des paires : (longueur du trait, longueur de l'espace entre les traits).
  • dashes = False : trace uniquement des traits continus.
  • les seuls markers autorisés sont : 'o', 'v', '^', '<', '>', '8', 's', 'p', '*', 'h', 'H', 'D', 'd', 'P', 'X'
  • si on a 2 variables dont les valeurs déterminent chaque courbe, on peut même combiner hue et style !
Pour tracer à la fois les points et les lignes : myPalette = {'a': 'green', 'b': 'blue'} df = pandas.DataFrame({'A': [1, 2, 3, 3, 4, 4, 4, 5, 5, 5], 'B': [6, 3, 7, 6, 8, 9, 5, 10, 7, 8], 'C': ['a', 'b', 'a', 'b', 'a', 'a', 'b', 'a', 'b', 'b']}) seaborn.scatterplot(x = 'A', y = 'B', hue = 'C', data = df, s = 40, hue_order = ['b', 'a'], palette = myPalette) seaborn.lineplot(x = 'A', y = 'B', hue = 'C', data = df, errorbar = None, legend = False)
Pour utiliser lineplot avec à la fois différentes couleurs et différents symboles quand nombreuses catégories, on peut utiliser la même variable pour hue et style et fixer palette et markers pour avoir des combinaisons uniques :
seaborn.lineplot(x = 'day', y = 'value', hue = 'categ', style = 'categ', markers = markers,
  palette = palette, dashes = False, data = df)
  
Attention, pour markers utiliser soit seulement des filled markers, seulement soit des unfilled markers.

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