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

Histogrammes

Displot

displot : permet de faire des histogrammes et des courbes de densité.
seaborn.displot(v, color = 'green', kind = 'hist', rug = True) : trace l'histogramme des valeurs de v. Paramètres :
  • kind = 'kde' : courbe de densité plutôt qu'un histogramme
  • kind = 'ecdf' : courbe de densité cumulée (empirical cumulative distribution function). Elle a l'avantage de ne pas nécessiter de paramètre car on ne fait pas de bins.
  • bins : le nombre de bins
  • binwidth : la largeur d'un bin (alternative)
  • rug = True : trace les traits sur l'axe des x pour les différentes valeurs.
  • legend = False : supprime la légende.
  • hue_order : donne l'ordre des valeurs du paramètre hue s'il est défini.
  • col_wrap = 3 : quand row n'est pas défini, et qu'on a plus de 3 valeurs pour col, indique qu'il faut retourner à la ligne toutes les 3 valeurs
  • aspect = 2 : indique les graphes doivent être 2 fois plus larges que hauts.
  • la valeur retournée est un FacetGrid avec lequel on peut fixer des propriétés additionnelles : par exemple fg.set_xlabels('abscisse')
import random random.seed(0) v = [random.gauss(0, 1) for i in range(300)] seaborn.displot(x = v, color = 'green', kind = 'hist', rug = True)
On peut tracer plusieurs histogrammes ou densités en fonction de certaines colonnes : seaborn.displot(x = 'v', data = df, color = 'green', hue = 'A', row = 'B', col = 'C', kind = 'kde', rug = True, palette = {'a': 'red', 'b': 'green', 'c': 'blue'})
Exemple complet : import random random.seed(0) df = pandas.DataFrame({'v': [random.gauss(0, 1) for i in range(60)], 'A': sum([['a', 'b', 'c'] for i in range(20)], []), 'B': sum([['b1', 'b2'] for i in range(30)], []), 'C': sum([['c1', 'c2', 'c2', 'c1'] for i in range(15)], [])}) df.loc[df['A'] == 'b', 'v'] += 0.2 df.loc[df['A'] == 'c', 'v'] += 0.3 df.loc[df['B'] == 'b2', 'v'] += 0.1 df.loc[df['C'] == 'c2', 'v'] -= 0.1 fg = seaborn.displot(x = 'v', data = df, color = 'green', hue = 'A', row = 'B', col = 'C', kind = 'kde', rug = True, palette = {'a': 'red', 'b': 'green', 'c': 'blue'}) fg.set_xlabels('abscisse') fg.set_ylabels('ordonnee') fg.tight_layout()

Histplot

histplot : analogue à displot, avec kind = 'hist' (histogramme) :
  • seaborn.histplot(x = 'v', data = df, color = 'green', edgecolor = 'none', bins = 50, kde = True) : trace l'histogramme et en même temps l'estimation de densité (avec un noyau gaussien).
  • bins = range(-3, 3) : on peut donner une liste d'intervalles.
  • stat = 'count' : montre les comptes, le défaut. stat = 'frequency' : compte divisé par la largeur du bin, stat = 'density' : normalise pour que l'aire de l'histogramme soit 1, stat = 'probability' : normalise pour la somme des hauteurs des barres soit 1.
  • cumulative = True : pour faire une distribution cumulée.
  • element = 'bars' : trace des barres (le défaut), element = 'step' : trace seulement l'enveloppe des barres, element = 'poly' : trace un polygône.
  • line_kws = {'linewidth': 5, 'linestyle': 'dashed'} : permet de donner les propriétés de la ligne de densité (mais on ne peut pas donner color, ça ne change pas la couleur !).
  • seaborn.histplot(x = 'A', hue = 'B', data = df, multiple = 'dodge', bins = 100, stat = 'percent', common_norm = False) : fait plusieurs histogrammes pour les différentes valeurs de B côte à côte.
  • seaborn.histplot(..., stat = 'proportion') : la somme des barres fait 1
  • seaborn.histplot(..., stat = 'percent') : la somme des barres fait 100

Ecdfplot

Ca trace la distribution cumulée (Empirical Cumulative Distribution Function)
seaborn.ecdfplot(x = 'val', data = df) : trace la distribution cumulée pour la variable val du dataframe. Paramètres :
  • on peut utiliser y au lieu de x pour inverser les axes x et y.
  • stat = 'count' : indique les comptes plutôt que les proportions (défaut : stat = 'proportion')
  • complementary = True : trace la distribution complémentaire (1 - CDF)
  • ax = myAxis : indique l'axes à utiliser s'il existe déjà.
  • hue = 'myVar' : utilise une autre colonne myVar du dataframe pour faire plusieurs courbes.
  • hue_order : pour préciser l'ordre des hue
  • palette : permet d'indiquer les couleurs à utiliser.
Exemple : import random random.seed(0) ind = range(200) v = [random.gauss(0, 1) for i in ind] + [random.gauss(4, 1) for i in ind] df = pandas.DataFrame({'val': v, 'lab': ['a' for i in ind] + ['b' for i in ind]}) seaborn.ecdfplot(x = 'val', data = df, hue = 'lab', hue_order = ['b', 'a'], palette = {'a': 'red', 'b': 'blue'})

Kdeplot

On peut aussi tracer directement la fonction de densité d'une variable
  • seaborn.kdeplot(x)
  • seaborn.kdeplot(x, fill = True, bw = 0.5) : avec remplissage de l'intérieur de la courbe et avec une largeur de bande de 0.5.
  • si on a un dataframe, on peut faire seaborn.kdeplot(x = 'A', data = df, fill = True)
  • on peut comparer 2 distributions facilement en faisant :
    seaborn.kdeplot(x1, fill = True, bw = 0.5, label = 'first')
    seaborn.kdeplot(x2, fill = True, bw = 0.5, label = 'second')
    pyplot.legend()
        
Traçage d'une densité en 2 dimensions (avec 2 variables) : import random x = numpy.array([random.gauss(0, 1) for i in range(300)]) y = x + numpy.array([random.gauss(0, 0.2) for i in range(300)]) seaborn.kdeplot(x = x, y = y, fill = True, n_levels = 7, cbar = True)
  • fill = True : gradations de couleurs plutôt que des courbes de niveau.
  • n_levels = 7 : nombre de niveaux.
  • c_bar = True : affiche une légende pour les niveaux de couleur.

Distributions 2d

Représentation d'une Distribution 2d :
  • seaborn.displot(x = 'v1', y = 'v2', data = df, color = 'green') : heatmap 2d.
  • cbar = True : affiche une barre de couleur pour les niveaux.
  • seaborn.displot(x = 'v1', y = 'v2', data = df, color = 'green', kind = 'kde') : avec des courbes de niveau.
  • seaborn.kdeplot(x = 'v1', y = 'v2', data = df, color = 'green') : autre formulation pour des courbes de niveau.
  • autres paramètres de kdeplot :
    • levels = 20 : nombre de lignes de niveau
    • bw_adjust = 0.5 : ajustage de la band width : plus elle est petite plus la représentation est fine (défaut est de 1)
import random random.seed(0) df = pandas.DataFrame({'v1': [random.gauss(0, 1) for i in range(100)], 'A': sum([['a', 'b'] for i in range(50)], [])}) df['v2'] = [df['v1'].loc[i] * (1 if df.loc[i, 'A'] == 'a' else -1) + random.gauss(0, 0.2) for i in range(len(df))] seaborn.kdeplot(x = 'v1', y = 'v2', data = df, color = 'green', hue = 'A', levels = 8, bw_adjust = 1)
Traçage du nuage de points :
  • seaborn.jointplot(x, y) : trace par défaut le nuage de points, mais aussi les histogrammes pour chacune des 2 variables et calcule la corrélation de pearson et la p-value.
  • si on a un dataframe pandas df avec des colonnes A et B : on peut faire : seaborn.jointplot(x = "A", y = "B", data = df)
import random x = numpy.array([random.gauss(0, 1) for i in range(300)]) y = x + numpy.array([random.gauss(0, 0.2) for i in range(300)]) seaborn.jointplot(x = x, y = y)
  • color = 'red' : la couleur des graphes.
  • xlim = (-7, 7) : les limites sur l'axe des x.
  • ylim = (-7, 7) : les limites sur l'axe des y.
  • kind :
    • kind = 'scatter' : nuage de points (le défaut)
    • kind = 'reg' : une regression linéaire sur le nuage de points et une densité en plus de l'histogramme pour chacune des 2 variables.
    • kind = 'kde' : une densité comme avec kdeplot à la fois pour le nuage de points 2d et chacun des 2 variables.
    • kind = 'hex' : un pavage hexagonal pour le graphe 2d.
  • on peut rajouter des paramètres pour customiser le nuage de points (joint_kws) et/ou pour les histogrammes (marginal_kws) : seaborn.jointplot(x = "A", y = "B", data = df, marginal_kws = {'bins': 50, 'color': 'red'}, joint_kws = {'color': 'green', 'marker': '+'})
jointplot retourne un objet seaborn.axisgrid.JointGrid qui a des fonctions qui permettent de customiser le graphe ou de rajouter des éléments dessus.

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