ggplot2
- ExercicesCe document accompagne la présentation Visualisation_ggplot2_RaQ2019.pdf
.
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 ».
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)
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.
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")
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 :
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);
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.
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"
)
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)
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)
)
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).