Annexe C — Matplotlib et Seaborn

Matplotlib construit la figure et contrôle ses éléments; Seaborn simplifie les graphiques statistiques à partir d’un tableau pandas. Dans le cours, les deux sont utilisés ensemble:

import matplotlib.pyplot as plt
import seaborn as sns

Chaque entrée ci-dessous donne l’objectif, les arguments courants et un exemple minimal. Les liens « Documentation officielle » ouvrent la référence complète.

Matplotlib

plt.subplots()

Documentation officielle

Objectif: créer une figure (fig) et un ou plusieurs axes (ax).

Arguments principaux:

  • nrows (int): nombre de lignes de panneaux;
  • ncols (int): nombre de colonnes de panneaux;
  • figsize (tuple[float, float]): largeur et hauteur de la figure en pouces;
  • sharex (bool): utiliser la même échelle horizontale dans tous les panneaux;
  • sharey (bool): utiliser la même échelle verticale dans tous les panneaux.

Exemple:

fig, axes = plt.subplots(1, 2, figsize=(10, 4))
1
Créer deux panneaux côte à côte dans une figure de 10 × 4 pouces.

À retenir: la figure est le contenant; chaque axe est une zone de tracé.

ax.plot()

Documentation officielle

Objectif: tracer une ligne reliant des coordonnées.

Arguments principaux:

  • x (Series ou tableau numérique): coordonnées horizontales, placées dans l’ordre fourni;
  • y (Series ou tableau numérique): coordonnées verticales associées à x;
  • color (str): couleur de la ligne, par exemple "tab:red";
  • linestyle (str): style de la ligne, par exemple "--";
  • label (str): texte affiché dans la légende.

Exemple:

ax.plot(aire, prediction, color="tab:red", label="Modèle")
1
Tracer les prédictions dans l’ordre de aire.

À retenir: trier x avant de tracer une courbe évite les zigzags artificiels.

ax.axhline()

Documentation officielle

Objectif: ajouter une ligne horizontale de référence.

Arguments principaux:

  • y (float): position de la ligne sur l’axe vertical;
  • color (str): couleur de la ligne;
  • linestyle (str): style de la ligne, par exemple ":" ou "--".

Exemple:

ax.axhline(0, color="black", linestyle="--")
1
Matérialiser la valeur attendue pour un résidu nul.

À retenir: une ligne de référence aide l’interprétation, mais ne remplace pas les données.

ax.axvline()

Documentation officielle

Objectif: ajouter une ligne verticale de référence.

Arguments principaux:

  • x (float): position de la ligne sur l’axe horizontal;
  • color (str): couleur de la ligne;
  • linestyle (str): style de la ligne;
  • label (str): texte affiché dans la légende.

Exemple:

ax.axvline(mediane, color="tab:orange", linestyle="--", label="Médiane")
1
Situer la médiane sur une distribution.

À retenir: la ligne matérialise une valeur déjà calculée; elle ne constitue pas une nouvelle observation.

ax.fill_between()

Documentation officielle

Objectif: colorer la région comprise entre deux courbes, par exemple les bornes d’un intervalle.

Arguments principaux:

  • x (Series ou tableau numérique): coordonnées horizontales communes aux deux limites;
  • y1 (Series ou tableau numérique): limite inférieure de la zone;
  • y2 (Series ou tableau numérique): limite supérieure de la zone;
  • color (str): couleur de remplissage;
  • alpha (float): opacité comprise entre 0 et 1;
  • label (str): texte affiché dans la légende.

Exemple:

ax.fill_between(
    grille["porosity_pct"],
    prediction["mean_ci_lower"],
    prediction["mean_ci_upper"],
    alpha=0.3,
)
1
Représente l’intervalle autour de la réponse moyenne prédite.

À retenir: la zone colorée ne montre pas automatiquement un intervalle de prédiction; son sens dépend des deux bornes fournies.

Axes et titres

Documentation officielle

Objectif: rendre la figure compréhensible hors du notebook.

Arguments principaux:

  • xlabel, ylabel ou label (str): texte décrivant la variable et son unité;
  • title (str): titre de l’axe ou de la légende.

Exemple:

ax.set_xlabel("Aire (mi²)")
ax.set_ylabel("Magnitude")
ax.set_title("Aire et réseau hydrographique")
ax.legend(title="Groupe")
1
Nommer la variable et son unité sur l’axe horizontal.
2
Nommer la variable réponse.
3
Donner au graphique un message descriptif.
4
Afficher et titrer la légende.

À retenir: une figure scientifique doit identifier variables, unités, groupes et contexte.

fig.tight_layout()

Documentation officielle

Objectif: ajuster automatiquement les marges entre les panneaux d’une figure.

Arguments principaux:

  • Aucun argument n’est nécessaire dans les cas utilisés dans le cours.

Exemple:

fig.tight_layout()
1
Réduire le chevauchement entre axes, titres et étiquettes.

À retenir: cette méthode modifie la mise en page, pas les données ni leur interprétation.

Échelles logarithmiques

Documentation officielle

Objectif: afficher un axe sur une échelle logarithmique.

Arguments principaux:

  • value (str): type d’échelle; "log" sélectionne une échelle logarithmique.

Exemple:

ax.set_xscale("log")
1
Espacer régulièrement les rapports plutôt que les différences.

À retenir: pour un histogramme en log, calculez aussi des bornes de classes logarithmiques; changer seulement l’axe produit des classes visuellement inégales.

Seaborn

sns.histplot()

Documentation officielle

Objectif: représenter la distribution d’une variable numérique.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la colonne numérique représentée;
  • bins (int): nombre de classes de l’histogramme;
  • binwidth (float): largeur de chaque classe, dans l’unité de x;
  • hue (str): nom d’une colonne catégorielle utilisée pour séparer les groupes par couleur;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.histplot(data=df, x="SiO2", bins=20, ax=ax)
1
Répartir les valeurs de SiO₂ dans 20 classes.

À retenir: vérifiez si la conclusion dépend fortement du choix des classes.

sns.ecdfplot()

Documentation officielle

Objectif: représenter, pour chaque valeur de l’axe horizontal, la proportion d’observations qui lui est inférieure ou égale.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la colonne numérique cumulée;
  • hue (str): nom d’une colonne catégorielle séparant les courbes;
  • stat (str): grandeur cumulée; "proportion" produit une échelle de 0 à 1;
  • complementary (bool): afficher la proportion supérieure plutôt qu’inférieure à chaque valeur;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.ecdfplot(data=df, x="hauteur_eau", ax=ax)
1
Tracer la distribution cumulative sans choisir de classes d’histogramme.

À retenir: l’ECDF conserve chaque observation et permet de lire directement des proportions ou des quantiles.

sns.boxplot()

Documentation officielle

Objectif: comparer médiane, quartiles et valeurs éloignées entre groupes.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la variable placée sur l’axe horizontal;
  • y (str): nom de la variable placée sur l’axe vertical;
  • order (list[str]): ordre d’affichage des catégories;
  • hue (str): nom d’une colonne catégorielle séparant les boîtes;
  • log_scale (bool): afficher l’axe numérique sur une échelle logarithmique;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.boxplot(data=df, x="eruption", y="SiO2", ax=ax)
1
Comparer les distributions sans supposer qu’elles sont symétriques.

À retenir: la boîte ne montre pas directement l’effectif ni toutes les observations.

sns.violinplot()

Documentation officielle

Objectif: représenter une estimation lissée de la densité d’une variable numérique, éventuellement séparée par catégories.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str ou Series): variable numérique ou catégorielle placée horizontalement;
  • y (str): nom de la variable placée verticalement lorsque data est utilisé;
  • hue (str): nom d’une colonne catégorielle séparant les distributions;
  • inner (str): résumé dessiné dans le violon, par exemple "quart";
  • cut (float): prolongement de la densité au-delà des observations; 0 l’empêche;
  • density_norm (str): règle utilisée pour normaliser la largeur des violons;
  • log_scale (bool): estimer et afficher la variable sur une échelle logarithmique;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.violinplot(
    x=volume,
    inner="quart",
    cut=0,
    log_scale=True,
    ax=ax,
)
1
Tracer une densité symétrique autour d’un axe central.
2
Utiliser les volumes comme variable numérique.
3
Ajouter la médiane et les quartiles à l’intérieur du violon.
4
Limiter l’estimation à l’étendue des observations.
5
Estimer et afficher la densité dans l’espace logarithmique.
6
Placer le graphique dans l’axe existant.

À retenir: la largeur représente une densité estimée, pas un effectif. Sa forme dépend du lissage et devient peu fiable avec un petit échantillon.

sns.boxenplot()

Documentation officielle

Objectif: représenter des quantiles emboîtés afin de détailler le centre et les queues d’une distribution.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str ou Series): variable numérique ou catégorielle placée horizontalement;
  • y (str): nom de la variable placée verticalement lorsque data est utilisé;
  • hue (str): nom d’une colonne catégorielle séparant les distributions;
  • order (list[str]): ordre d’affichage des catégories;
  • k_depth (str): profondeur des quantiles emboîtés;
  • outlier_prop (float): proportion attendue d’observations affichées comme éloignées;
  • log_scale (bool): afficher l’axe numérique sur une échelle logarithmique;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.boxenplot(
    x=volume,
    log_scale=True,
    ax=ax,
)
1
Construire un letter-value plot à partir de quantiles successifs.
2
Utiliser les volumes comme variable numérique.
3
Afficher les quantiles dans l’espace logarithmique.
4
Placer le graphique dans l’axe existant.

À retenir: le boxenplot est surtout informatif pour les grands échantillons; avec peu d’observations, les quantiles des queues sont instables et difficiles à interpréter.

sns.stripplot()

Documentation officielle

Objectif: montrer les observations individuelles réparties selon une catégorie.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la variable placée sur l’axe horizontal;
  • y (str): nom de la variable placée sur l’axe vertical;
  • hue (str): nom d’une colonne catégorielle utilisée pour la couleur;
  • jitter (bool): décaler légèrement les points pour limiter leur superposition;
  • alpha (float): opacité comprise entre 0 et 1;
  • size (float): taille des marqueurs;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.stripplot(data=df, x="eruption", y="SiO2", alpha=0.3, ax=ax)
1
Superposer les analyses individuelles à un résumé de groupe.

À retenir: la transparence et une petite taille réduisent le chevauchement sans supprimer les observations.

sns.scatterplot()

Documentation officielle

Objectif: représenter la relation entre deux variables numériques et, si nécessaire, encoder d’autres dimensions.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la colonne numérique placée en abscisse;
  • y (str): nom de la colonne numérique placée en ordonnée;
  • hue (str): nom d’une colonne utilisée pour la couleur;
  • style (str): nom d’une colonne catégorielle utilisée pour la forme des marqueurs;
  • size (str ou float): colonne ou valeur déterminant la taille des marqueurs;
  • alpha (float): opacité comprise entre 0 et 1;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.scatterplot(
    data=df, x="SiO2", y="K2O",
    hue="eruption", style="epoch", alpha=0.6, ax=ax,
)
1
Encoder deux variables supplémentaires par couleur et symbole.

À retenir: chaque encodage doit répondre à une question; trop de dimensions rendent la figure illisible.

sns.lineplot()

Documentation officielle

Objectif: tracer une ligne à partir de colonnes d’un DataFrame.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la colonne définissant l’ordre horizontal;
  • y (str): nom de la colonne numérique représentée;
  • hue (str): nom d’une colonne séparant plusieurs lignes par couleur;
  • color (str): couleur unique de la ligne;
  • estimator (str ou fonction): résumé appliqué lorsque plusieurs valeurs partagent le même x;
  • errorbar (str ou None): incertitude affichée autour de la ligne;
  • ax (Axes): axe Matplotlib dans lequel tracer le graphique.

Exemple:

sns.lineplot(data=df, x="porosity_pct", y="prediction", ax=ax)
1
Trace les valeurs prédites dans l’ordre de la variable en abscisse.

À retenir: triez explicitement les valeurs de x lorsque la ligne doit représenter une fonction ajustée.

sns.lmplot()

Documentation officielle

Objectif: représenter un nuage de points et une tendance linéaire dans un ou plusieurs panneaux.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • x (str): nom de la colonne utilisée comme prédicteur;
  • y (str): nom de la colonne utilisée comme réponse;
  • hue (str): nom d’une colonne séparant les groupes par couleur;
  • col (str): nom d’une colonne créant un panneau par modalité;
  • row (str): nom d’une colonne créant une ligne de panneaux;
  • ci (int ou None): niveau de l’intervalle de confiance, ou None pour le masquer;
  • height (float): hauteur de chaque panneau en pouces;
  • aspect (float): rapport largeur/hauteur de chaque panneau.

Exemple:

sns.lmplot(
    data=df, x="porosity_pct", y="log10_permeability_md",
    col="field", hue="field", ci=None,
)
1
Compare la forme de la relation dans plusieurs groupes avec le même encodage.

À retenir: les droites produites par lmplot() sont d’abord descriptives. Des effectifs ou domaines de \(x\) différents peuvent rendre leur comparaison trompeuse.

sns.heatmap()

Documentation officielle

Objectif: représenter une matrice numérique par des couleurs.

Arguments principaux:

  • data (DataFrame numérique): matrice dont les lignes et colonnes seront représentées;
  • annot (bool): afficher les valeurs numériques dans les cellules;
  • fmt (str): format des valeurs affichées, par exemple ".2f";
  • cmap (str): palette de couleurs;
  • center (float): valeur placée au centre de la palette divergente;
  • vmin (float): borne inférieure de l’échelle de couleurs;
  • vmax (float): borne supérieure de l’échelle de couleurs.

Exemple:

sns.heatmap(correlations, annot=True, vmin=-1, vmax=1, center=0)
1
Conserver une échelle symétrique commune à toutes les corrélations.

À retenir: une heatmap aide à repérer; les coefficients et effectifs restent nécessaires pour conclure.

sns.pairplot()

Documentation officielle

Objectif: explorer plusieurs distributions et relations deux à deux.

Arguments principaux:

  • data (DataFrame): tableau contenant les observations;
  • vars (list[str]): noms des colonnes numériques à combiner deux à deux;
  • hue (str): nom d’une colonne catégorielle utilisée pour distinguer les groupes;
  • corner (bool): masquer la moitié supérieure redondante de la matrice;
  • diag_kind (str): graphique placé sur la diagonale, par exemple "hist".

Exemple:

sns.pairplot(df, vars=["SiO2", "K2O", "MgO"], hue="eruption", corner=True)
1
Limiter volontairement le nombre de variables pour garder la figure lisible.

À retenir: pairplot sert à choisir une question bivariée; ce n’est pas la figure finale d’une conclusion.