Introduction à R · L2 · Section 3/6
Visualisation
Progression
#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étriegeom.- 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
- Données :
ggplot(data = notes)initialise le graphique. - Esthétiques :
aesrelie une variable à un rôle visuel (axe x, axe y, couleur, forme). - Géométrie : chaque
geom_dessine une couche (points, barres, boîtes, lignes).
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 visuelle | Variables | Géométrie |
|---|---|---|
| Distribution d'une quantitative | 1 quantitative | geom_histogram, geom_density |
| Comparer des groupes | 1 qualitative + 1 quantitative | geom_boxplot, geom_violin |
| Lien entre deux quantitatives | 2 quantitatives | geom_point (+ geom_smooth) |
| Décompte par catégorie | 1 qualitative | geom_bar (ou geom_col si décompte précalculé) |
| Évolution ordonnée | 1 ordinale/temporelle + 1 quantitative | geom_line |
Exemple pour le lien révision et note, cœur du jeu fil rouge :
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.
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 :
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
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 :
- « Répartition des 10 notes » ;
- « La note médiane par filière, avec les effectifs » ;
- « Lien entre heures de révision et note, distingué par filière ».
#Atelier
- 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.
- 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. - 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.