Graphiques en R

Choisir une figure
Vérifier et expliquer le résultat

Aurélien Nicosia · 7 octobre 2026
STT-4230 / STT-6230 · Semaine 6

Aujourd’hui

  • Choisir un graphique adapté à la question.
  • Comprendre ce que représentent les axes.
  • Enregistrer une figure et la commenter dans un rapport.

Nous ferons aussi le point sur les propositions de projet.

Retour du mini-test : quoi vérifier ?

  • Choisir le graphique selon la question et les variables.
  • Préciser les axes, les unités, la légende et les échelles.
  • Lire les avertissements et vérifier les lignes retirées.

Un point hors des moustaches d’une boîte n’est pas automatiquement une erreur. Vérifier la saisie, l’unité et le contexte avant d’écarter une valeur.

Retour anonymisé sur la question 3 du mini-test 4 (semaine 6).
Équipe ggplot2 : étiquettes, boîtes et valeurs manquantes · NIST/SEMATECH, valeurs atypiques, consultés le 7 octobre 2026.

Avant le code, la question

Ce que l’on veut voir Variables Géométrie possible
Une relation Deux variables numériques geom_point()
Une distribution Une variable numérique geom_histogram()
Une distribution par groupe Numérique et catégorie geom_boxplot()
Un nombre par catégorie Une catégorie geom_bar()

Quelle quantité la hauteur ou la position représente-t-elle ?

Un exemple des notes du cours

datasets::quakes contient 1 000 séismes près de Fidji.

Une ligne représente un séisme.

Variable Ce qu’elle décrit
mag La magnitude
depth La profondeur, en km
long La longitude

Pour la démonstration, Ouest correspond aux longitudes inférieures à 175° et Est aux autres. Ce découpage est pédagogique.

geom_bar() compte les observations

ggplot(seismes, aes(classe)) +
  geom_bar() +
  labs(x = "Classe de magnitude",
       y = "Nombre de séismes")

classe regroupe les magnitudes : [4, 5[, [5, 6[ et [6, 7[.

La couche compte les observations, sans colonne y à fournir.

Des hauteurs déjà calculées : geom_col()

effectifs <- seismes |>
  count(region, classe, .drop = FALSE)

ggplot(effectifs,
       aes(classe, n, fill = region)) +
  geom_col(position = "dodge")

Ici, la colonne n donne les hauteurs.

Un nombre ou une proportion ?

Dans Ouest, 151 des 205 séismes appartiennent à la classe [4, 5[.

Ce que l’on décrit Valeur
Nombre de séismes dans cette classe et ce sous-ensemble 151
Part de cette classe parmi les séismes d’Ouest 151 / 205 ≈ 73,7 %

Pour interpréter un pourcentage, demander : « Parmi quelles observations ? »

Calculer avant de dessiner

proportions <- effectifs |>
  group_by(region) |>
  mutate(proportion = n / sum(n)) |>
  ungroup()

Le calcul est fait séparément pour Ouest et Est.

Vérifier que les proportions totalisent 100 % dans chaque sous-ensemble.

Cette figure se comprend-elle seule ?

Que faudrait-il préciser ?

  • Le titre.
  • Le sens de l’axe y.
  • Les groupes comparés.

La même figure, plus lisible

La figure décrit les observations de ce tableau. Elle ne mesure pas un risque sismique.

Enregistrer la figure

dir.create("outputs", showWarnings = FALSE)
ggsave("outputs/06-proportions-seismes.png",
       plot = figure_annotee,
       width = 10, height = 6, dpi = 300)

Ouvrir le PNG et vérifier que les textes sont lisibles et complets.

Le script permet de refaire la figure.

Trois habitudes utiles

  1. Charger les bibliothèques au début du script.
  2. Employer des noms clairs et des chemins relatifs.
  3. Relancer le script dans une session R neuve.

Le script doit fonctionner sans objets créés à la main.

Un premier rapport reproductible

Un fichier Quarto réunit :

  • la question et la source des données;
  • le code, le tableau et la figure;
  • une interprétation et les limites.

Ouvrir le rapport de démonstration, puis regarder sa source .qmd.

La semaine prochaine approfondira R Markdown et Quarto.

Des barres qui partent de zéro

Part des séismes de magnitude inférieure à 5 dans chaque sous-ensemble.

À éviter : axe tronqué

Deux proportions identiques aux données initiales, 73,7 % et 81,9 %, représentées par des barres dont l’axe commence à 70 %.

À privilégier : origine à zéro

Les mêmes proportions, 73,7 % et 81,9 %, représentées par des barres avec un axe de 0 à 100 %.

Sur une échelle linéaire, la longueur d’une barre représente la valeur : commencer à zéro.

Comparer avec une échelle commune

Même tableau de proportions, présenté séparément pour Ouest et Est.

À éviter pour comparer : axes différents

Composition des magnitudes dans Ouest et Est, avec une échelle verticale différente dans chaque panneau.

À privilégier : le même axe

Même composition des magnitudes avec une échelle commune de 0 à 100 % dans les deux panneaux.

Pour comparer les hauteurs entre panneaux, garder la même échelle.

Une moyenne ne montre pas la dispersion

Question : comment les profondeurs se répartissent-elles dans chaque sous-ensemble ?

À éviter ici : la moyenne seule

Deux barres montrant seulement la profondeur moyenne par sous-ensemble; la dispersion est invisible.

À privilégier : boîtes et points

Boîtes à moustaches et 1000 points montrant les profondeurs dans Ouest et Est. Les points sont décalés horizontalement seulement.

Pour montrer une distribution, rendre sa dispersion visible. Ici, chaque point représente un séisme.

Équipe ggplot2, boîtes à moustaches · Points décalés horizontalement pour les distinguer; profondeurs inchangées.

Limiter le chevauchement des points

Même nuage de 1 000 séismes, mêmes axes et mêmes valeurs.

À éviter : gros points opaques

Magnitude et profondeur des 1000 séismes, avec de gros points opaques qui se superposent.

À privilégier : petits points transparents

Même nuage avec des points plus petits et partiellement transparents, sans déplacement des valeurs.

Réduire la taille et utiliser la transparence pour mieux voir les superpositions.

Wilke (2019), points superposés · La transparence ne permet pas de compter exactement les points superposés.

Proposition du projet : 7 octobre

  • Une équipe et une question précise.
  • Une source accessible, ses variables et ses limites.
  • Un produit envisagé, un public et un plan de travail.
  • Un dépôt GitHub avec docs/proposition.md et les commits poussés.

La proposition vaut 4 points sur les 30 du projet. Le produit fonctionnel sera développé ensuite.

STT-6230 : une note technique liée au projet est obligatoire. L’IA est permise et déclarée selon les consignes du projet.

Références et fichiers