Introduction
à ggplot2

Construire une figure par couches
Puis lancer le projet d’équipe

Aurélien Nicosia · 30 septembre 2026
STT-4230 / STT-6230

Les éléments d’une figure

Élément Rôle Fonction
Données Le tableau à représenter ggplot(data = ...)
Associations esthétiques Variables liées à x, y, couleur… aes()
Couches géométriques Points, lignes, barres… geom_*()
Échelles Correspondance entre valeurs et apparence scale_*()
Facettes Une vue par sous-groupe facet_wrap()
Étiquettes et thème Texte et apparence générale labs(), theme_*()

+ ajoute une couche ou un composant au graphique.

Des données réelles, déjà disponibles dans R

library(ggplot2)
library(dplyr)

arbres <- as_tibble(datasets::Orange) |>
  transmute(
    arbre = factor(Tree, levels = 1:5,
                   ordered = FALSE),
    temps_j = age,
    circonf_mm = circumference
  )

35 mesures, 5 orangers, 7 dates par arbre.

Arbre Temps (jours) Circonf. (mm)
1 118 30
1 484 58
1 664 87
1 1004 115
1 1231 120

Le temps est compté depuis le 31 décembre 1968.

Une ligne du tableau correspond à une mesure sur un arbre. Les mesures d’un même arbre sont répétées.

1. Les données et les axes

p0 <- ggplot(
  arbres,
  aes(x = temps_j, y = circonf_mm)
)
p0

aes() associe une colonne à une propriété visuelle.

Les axes sont prêts. Aucune géométrie ne représente encore les mesures.

2. Une couche de points

p1 <- p0 +
  geom_point(size = 3)
p1

Chaque mesure devient un point.

size = 3 fixe la taille pour toute la couche.

3. Une couleur liée à une variable

p2 <- p0 +
  geom_point(aes(colour = arbre),
             size = 3)
p2

colour = arbre se trouve dans aes().

Les couleurs distinguent les arbres. Une légende apparaît.

Une couleur fixe pour tous les points

p_fixe <- p0 +
  geom_point(colour = "steelblue",
             size = 3)
p_fixe

La couleur se trouve hors de aes().

Tous les points deviennent bleus.

Le piège de la constante dans aes()

p_piege <- p0 +
  geom_point(aes(colour = "steelblue"),
             size = 3)
p_piege

Ici, "steelblue" devient une catégorie.

L’échelle choisit sa couleur et produit une légende nommée « steelblue ».

4. Superposer deux couches

p3 <- p0 +
  geom_line(aes(group = arbre),
            colour = "grey65") +
  geom_point(aes(colour = arbre),
             size = 3)
p3

group = arbre indique quelles mesures relier.

Les points sont dessinés après les lignes.

Associations globales et locales

p4 <- ggplot(
  arbres,
  aes(temps_j, circonf_mm,
      colour = arbre, group = arbre)
) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 3)
p4

Les associations dans ggplot() sont héritées par les deux couches.

Une association dans geom_point() concerne cette couche.

5. Donner des étiquettes utiles

p5 <- p4 +
  labs(
    title = "Croissance de cinq orangers",
    x = "Temps (jours)",
    y = "Circonférence du tronc (mm)",
    colour = "Arbre"
  )
p5

labs() précise le titre, les axes et le titre de la légende.

Les unités rendent la figure interprétable.

6. Choisir une échelle de couleurs

p6 <- p5 +
  scale_colour_brewer(palette = "Dark2")
p6

scale_colour_brewer() choisit une palette pour les catégories.

L’association colour = arbre reste la même.

7. Séparer les arbres en facettes

p7 <- p6 +
  facet_wrap(vars(arbre), nrow = 1) +
  guides(colour = "none")
p7

Les axes sont communs par défaut. Chaque panneau représente un arbre.

8. Régler l’apparence générale

p8 <- p6 +
  theme_minimal(base_size = 16) +
  theme(legend.position = "bottom")
p8

Le thème règle le fond, la grille et les textes.

Il conserve les données et les associations esthétiques.

La construction complète

figure <- ggplot(
  arbres,
  aes(temps_j, circonf_mm,
      colour = arbre, group = arbre)
) +
  geom_line(linewidth = 0.8) +
  geom_point(size = 3) +
  scale_colour_brewer(palette = "Dark2") +
  labs(
    title = "Croissance de cinq orangers",
    x = "Temps (jours)",
    y = "Circonférence du tronc (mm)",
    colour = "Arbre"
  ) +
  theme_minimal(base_size = 16) +
  theme(legend.position = "bottom")
figure

Les deux geom_*() ajoutent les couches.

scale_*(), labs() et theme_*() configurent les autres composants.

Ici, les lignes relient les observations d’un même arbre. Elles ne sont pas des régressions.

Conserver une figure reproductible

dir.create("figures", showWarnings = FALSE)
ggsave(
  "figures/croissance-orangers.png",
  plot = figure,
  width = 9, height = 5, units = "in",
  dpi = 300
)

Le script conserve les instructions de construction.

Le fichier PNG sert à intégrer la figure dans un document.

plot = figure indique explicitement quel graphique enregistrer.

À vous : une figure en cinq panneaux

À partir de arbres, produire une figure avec :

  • un panneau par arbre;
  • des lignes grises reliant les mesures du même arbre;
  • des points bleus de taille 3;
  • des axes nommés avec leurs unités et un thème minimal.

Avant d’exécuter : quelles propriétés vont dans aes() ?

Travail individuel, sans IA. Comparer ensuite vos choix avec une autre personne.

Une solution possible

solution <- ggplot(
  arbres,
  aes(temps_j, circonf_mm)
) +
  geom_line(aes(group = arbre),
            colour = "grey60") +
  geom_point(colour = "steelblue", size = 3) +
  facet_wrap(vars(arbre), nrow = 1) +
  labs(x = "Temps (jours)",
       y = "Circonférence du tronc (mm)") +
  theme_minimal(base_size = 16)
solution

group varie selon l’arbre. La couleur des points est une constante.

Le projet filé en équipe

Un projet de science des données qui compte pour 30 % de la note finale.

  • Équipes de 3 personnes par défaut. Une équipe de 2 ou 4 nécessite une approbation.
  • Sujet et source de données choisis par l’équipe, puis approuvés.
  • Produit final : rapport, tableau de bord, Shiny, learnr, site, outil R ou autre format approuvé.
  • Contributions individuelles visibles dans le dépôt GitHub.

L’IA est permise et doit être déclarée lorsqu’elle influence significativement le travail.

Ce que le projet doit rendre visible

Dans le dépôt Ce que l’équipe doit pouvoir expliquer
Données et pipeline R Provenance, nettoyage, transformations
Produit dans le format retenu Objectif, public, résultats ou fonctionnalités utiles
README et dépendances Procédure pour reproduire le travail
Vérifications et limites Contrôles effectués, portée des conclusions
Historique GitHub et contributions Travail réalisé et relu par chaque membre

STT-6230 : une note technique liée au projet est également obligatoire.

Les étapes du projet

Date Étape
7 octobre · semaine 6 Proposition et dépôt initial
4 novembre · semaine 9 Suivi formatif
25 novembre · semaine 12 Version intermédiaire
9 décembre · semaine 14 Remise finale et défense pendant la séance

La présentation, la revue de code et le bilan final font partie du projet de 30 %.

La proposition du 7 octobre

  • Titre provisoire et membres.
  • Question précise.
  • Source et variables utiles.
  • Limites connues des données.
  • Produit final envisagé.
  • Risques techniques.
  • Première répartition des tâches.
  • Lien vers le dépôt GitHub.

Le gabarit de proposition peut servir de point de départ.

Atelier de lancement des équipes

  1. Former une équipe de trois et vérifier les disponibilités communes.
  2. Retenir un thème et formuler une première question.
  3. Repérer une source et ouvrir un fichier pour examiner les variables.
  4. Répartir les premières tâches et convenir d’un prochain échange.

Avant de partir : une équipe, une question provisoire, une source et une prochaine action par personne.

Références et ressources

Les mesures répétées servent ici à apprendre la construction graphique. Ce support ne réalise pas de test statistique sur les arbres.