Ce document accompagne la présentation Visualisation_ggplot2_RaQ2019.pdf.

Instructions :

Dans un script R, proposez des solutions aux exercices suivants. Lorsque vous avez terminé, comparez votre solution à la mienne. Pour voir ma solution, il suffit de faire afficher le bout de code qui la contient en cliquant sur le petit bouton « Code » à droite juste en dessous du sous-titre « Solution ».

Données :

Ces exercices qui vous ferons encore une fois manipuler les données quakes.

# Préparation des données
quakes$magFactor <- factor(floor(quakes$mag))               # classe de magnitude
quakes$region <- factor(quakes$long >= 175, labels = c("Ouest", "Est"))  # région
str(quakes)
## 'data.frame':    1000 obs. of  7 variables:
##  $ lat      : num  -20.4 -20.6 -26 -18 -20.4 ...
##  $ long     : num  182 181 184 182 182 ...
##  $ depth    : int  562 650 42 626 649 195 82 194 211 622 ...
##  $ mag      : num  4.8 4.2 5.4 4.1 4 4 4.8 4.4 4.7 4.3 ...
##  $ stations : int  41 15 43 19 11 12 43 15 35 19 ...
##  $ magFactor: Factor w/ 3 levels "4","5","6": 1 1 2 1 1 1 1 1 1 1 ...
##  $ region   : Factor w/ 2 levels "Ouest","Est": 2 2 2 2 2 2 1 2 2 2 ...
# Chargement du package ggplot2
library(ggplot2)

Exercice 1

Produisez avec ggplot2 l’équivalent de l’exemple de graphique produit avec le package lattice dans la présentation. Votre graphique devrait ressembler à celui sous la solution.

Solution :

ggplot(data = quakes) +
  geom_point(mapping = aes(x = depth, y = stations, colour = magFactor)) +
  facet_wrap(facets = ~ region) +
  labs(title = "Nombres de stations ayant rapporté les séismes selon différentes variables") +
  labs(x = "profondeur") +
  labs(y = "nombre de stations") +
  labs(colour = "classe de\nmagnitude")

Exercice 2

Produisez avec ggplot2 un diagramme de dispersion des observations de la variable stations en fonction de la variable mag, du jeu de données quakes. Les points doivent avoir une couleur différente selon la variable region.

Avec la fonction geom_smooth, ajoutez au diagramme :

  1. la courbe de régression de la variable stations en fonction de la variable mag (une seule courbe, donc ne pas tenir compte de la variable région pour cette couche);

  2. deux courbes de lissage par la méthode "loess", soit une pour chaque niveau de la variable region, accompagnées de région de confiance (avec le niveau de confiance par défaut).

Votre graphique devrait ressembler à celui sous la solution.

Solution :

ggplot(
    data = quakes, 
    mapping = aes(x = mag, y = stations)
  ) +
  geom_point(
    mapping = aes(colour = region)
  ) +
  geom_smooth(        # i. Ajout de la courbe de régression
    method = "lm",
    se = FALSE, 
    linetype = 2
  ) +
  geom_smooth(        # ii. Ajout des deux courbes de lissage
    mapping = aes(colour = region), 
    method = "loess"
  ) +
  labs(
    x = "magnitude du séisme",
    y = "nombre de stations rapportant le séisme",
    colour = "région"
  )

Exercice 3

Produisez avec ggplot2 l’équivalent de l’exemple de graphique produit avec le système de base dans la présentation. Votre graphique devrait ressembler à celui sous la solution (peut-être pas avec autant de détails pour tenter de reproduire la mise en forme du système graphique de base)

Solution :

ggplot(
    data = quakes,
    mapping = aes(x = magFactor, y = stations)
  ) +
  geom_boxplot(
    size = 0.8,
    outlier.shape = 1,
    outlier.size = 1.5
    # référence pour l'ajout de lignes aux bouts des moustaches :
    # https://stackoverflow.com/questions/53170465/how-to-make-a-base-r-style-boxplot-using-ggplot2
  ) +
  geom_jitter(
    mapping = aes(colour = region),
    alpha = 0.2, 
    width = 0.3
  ) +
  scale_colour_manual(
    values = c("red", "blue")
  ) +
  scale_y_continuous(breaks= seq(20, 120, 20)) +
  labs(
    title = "Nombres de stations ayant rapporté les séismes\nselon leurs classes de magnitude",
    x = "classe de magnitude",
    y = "nombre de stations ",
    colour = "région"
  ) +
  theme_classic() +
  theme(
    plot.title = element_text(hjust = 0.5),
    legend.position = c(0.9, 0.2),
    legend.title.align = 0.5,
    axis.text = element_text(colour = "black"),
    axis.text.y = element_text(angle = 90, hjust = 0.5)
  )

Exercice 4

Ajoutez au graphique produit dans l’exercice 2 une légende qui distingue le type de courbe. Ajoutez aussi une annotation textuelle, en bas à droite, informant que le coefficient de détermination de la régression vaut 0.725.

ggplot(
    data = quakes, 
    mapping = aes(x = mag, y = stations)
  ) +
  geom_point(
    mapping = aes(colour = region)
  ) +
  geom_smooth(                              # i. Ajout de la courbe de régression
    mapping = aes(linetype = "c1"),         # linetype doit être dans aes
    method = "lm",
    se = FALSE
  ) +
  geom_smooth(                              # ii. Ajout des deux courbes de lissage
    mapping = aes(colour = region, linetype = "c2"),  # linetype doit être dans aes
    method = "loess"
  ) +
  labs(
    x = "magnitude du séisme",
    y = "nombre de stations rapportant le séisme",
    colour = "région"
  ) +
  scale_linetype_manual(
    name = "",
    values = c("c1" = 2, "c2" = 1), 
    labels = c("c1" = "droite de régression", "c2" = "courbe de lissage")
  ) + 
  theme(
    legend.key.width = unit(1.5, "cm"),
    legend.key = element_rect(fill = "transparent")  # n'a pas d'effet, je ne sais pas pourquoi!
  ) +
  geom_text(
    mapping = aes(x = 6.2, y = 10, label = "R^2 == 0.725"),
    parse = TRUE
  )
# Grâce à parse = TRUE, la valeur donnée à label est interprétée comme
# une expression plotmath (annotation mathématique).