Aller au contenu principal

Introduction à R · L2 · Section 3/6

Visualisation

Progression

Points d’expérience : XPSérie de jours consécutifs : · —Progression du module : — / —compris

#Visualiser avec ggplot2

La grammaire des graphiques, implémentée par ggplot2, construit une visualisation en composant des briques déclaratives : données, esthétiques, géométries, échelles, facettes. Contre la galerie de recettes copiées-collées, la grammaire offre un système : une fois les cinq briques comprises, tout graphique devient exprimable.

#Prérequis et objectifs

  • Prérequis : la section Manipulation de données (le jeu notes.csv, les verbes dplyr, le pipe).
  • Construire un graphique en trois temps : données, mapping aes, géométrie geom.
  • Choisir la géométrie selon le type de variables (quantitatives, catégorielles).
  • Habiller (titres, axes, thèmes), comparer par facettes, exporter pour publication.

#La grammaire en trois temps

  1. Données : ggplot(data = notes) initialise le graphique.
  2. Esthétiques : aes relie une variable à un rôle visuel (axe x, axe y, couleur, forme).
  3. Géométrie : chaque geom_ dessine une couche (points, barres, boîtes, lignes).
rr

1library(ggplot2)2 3notes |>4  ggplot(aes(x = filiere, y = note, fill = filiere)) +5  geom_boxplot() +6  labs(title = "Distribution des notes par filière",7       x = "Filière", y = "Note sur 20") +8  theme_minimal()

Lecture attendue du résultat : trois boîtes à moustaches. Les médianes d'info (15) et d'eco (13) dominent celle de maths (11) ; la boîte info est plus haute (notes dispersées, de 9 à 16.5) ; eco montre la note maximale du jeu (17, Hélène). Le fill = filiere colore par filière : purement décoratif ici, l'axe x porte déjà l'information.

La ligne la plus importante est le mapping : changer y = note en y = heures_revision change le graphique sans toucher au reste. C'est la promesse de la grammaire.

#Choisir la géométrie selon les variables

Le choix se décide par les types croisés des variables à montrer :

Question visuelleVariablesGéométrie
Distribution d'une quantitative1 quantitativegeom_histogram, geom_density
Comparer des groupes1 qualitative + 1 quantitativegeom_boxplot, geom_violin
Lien entre deux quantitatives2 quantitativesgeom_point (+ geom_smooth)
Décompte par catégorie1 qualitativegeom_bar (ou geom_col si décompte précalculé)
Évolution ordonnée1 ordinale/temporelle + 1 quantitativegeom_line

Exemple pour le lien révision et note, cœur du jeu fil rouge :

rr

1notes |>2  ggplot(aes(x = heures_revision, y = note)) +3  geom_point(size = 2) +4  geom_smooth(method = "lm") +5  labs(title = "La révision paie-t-elle ?",6       x = "Heures de révision", y = "Note sur 20") +7  theme_minimal()

Lecture attendue : les dix points s'alignent le long d'une droite croissante (corrélation quasi parfaite dans ce jeu simulé), la bande grise de geom_smooth matérialise l'incertitude. Le lien sera quantifié dans la section Modèles statistiques : c'est la même relation, vue puis mesurée.

#Échelles : contrôler la traduction données vers pixels

Le mapping dit quelle variable joue quel rôle ; les échelles (scale_*) disent comment. Usages quotidiens :

  • scale_y_continuous(limits = c(0, 20), breaks = seq(0, 20, 4)) : une note sur 20 commence à 0, graduations propres ;
  • scale_fill_manual(values = c(...)) : palette manuelle pour respecter une charte ;
  • scale_color_brewer(palette = "Dark2") : palettes équilibrées.

Un graphique honnête commence par des axes qui ne trompent pas : une échelle tronquée qui ne démarre pas à zéro exagère les différences. À l'inverse, inutile de forcer un histogramme à démarrer à zéro sur l'axe y : une densité ne le demande pas. La règle : savoir ce que le lecteur comparera, et rendre cette comparaison loyale.

#Facettes : multiplier les sous-graphiques

Le facettage découpe le graphique en panneaux selon une variable : comparaison côte à côte sans superposition illisible.

rr

1notes |>2  ggplot(aes(x = heures_revision, y = note)) +3  geom_point() +4  geom_smooth(method = "lm", se = FALSE) +5  facet_wrap(~ filiere, ncol = 3) +6  labs(title = "Révision et note, par filière") +7  theme_minimal()

Attendu : trois panneaux (info, maths, eco), chacun avec ses trois ou quatre points et sa droite. facet_wrap enroule les panneaux (avec ncol, on fixe les colonnes) ; facet_grid(ligne ~ colonne) bâtit une matrice selon deux variables. À trois ou quatre niveaux, les facettes éclairent ; au-delà, la page se fragmente : filtrez ou agrégez d'abord.

#Narration : titres, annotations, thèmes

Un graphique livré doit répondre à trois questions par lui-même : quoi (titre), comment lire (labs pour les axes et la légende), quoi retenir. Les annotations placent la lecture :

rr

1notes |>2  ggplot(aes(x = heures_revision, y = note)) +3  geom_point() +4  annotate("text", x = 6, y = 17.5,5           label = "Hélène : 12 h, 17/20", hjust = 0) +6  labs(title = "La révision paie : +1 point par heure environ",7       subtitle = "10 étudiants, 3 filières",8       x = "Heures de révision", y = "Note sur 20") +9  theme_minimal()

Les thèmes (theme_minimal, theme_bw, theme_classic) habillent l'ensemble ; theme() règle chaque détail (tailles, grilles, marges) pour construire un thème maison conforme à une charte.

#Exporter

rr

1# Vectoriel : pour un rapport PDF, netteté à toute échelle2ggsave("figures/revision-note.pdf", width = 6, height = 4)3 4# Bitmap haute résolution : pour un dépôt qui exige du PNG5ggsave("figures/revision-note.png", width = 6, height = 4, dpi = 300)

Spécifiez toujours width/height en pouces : le texte du graphique garde ainsi une taille cohérente avec le document hôte, là où un redimensionnement à la main dans le traitement de texte déforme tout.

#Exercice : lire avant de coder

Avant d'écrire le code, dites pour chacune de ces questions quelle géométrie vous choisiriez et pourquoi :

  1. « Répartition des 10 notes » ;
  2. « La note médiane par filière, avec les effectifs » ;
  3. « Lien entre heures de révision et note, distingué par filière ».

#Atelier

  1. Reproduisez un graphique du New York Times : identifiez sa structure (géométries, couleurs, facettes, annotations), puis implémentez-la sur vos données. L'objectif est la décomposition, pas la copie parfaite.
  2. Construisez un tableau de bord minimal avec flexdashboard : trois panneaux (distribution des notes, relation révision et note, tableau des moyennes par filière), publié en HTML.
  3. Exportez vos deux meilleurs graphiques en PDF vectoriel, tailles explicites, et vérifiez le rendu après insertion dans un document : aucun texte pixelisé, aucune marge coupée.