patchwork et fonction ggMarginal de ggExtra
patchwork et fonction ggMarginal de ggExtra
- Introduction
- Chargement package et description des données
- Création des graphiques
- Combinaison de graphique
- Agencement vertical et horizontal
- Exemple d’ajout d’espace entre les graphiques
- Précision des dimensions de chaque graphique
- Exemple de dispositions imbriquées
- Exemple de disposition au même niveau
- Exemple: les uns sur les autres : Grap4, Grap2 et Grap44 sur Grap1
- Exemple: les uns sous les autres: Grap4, Grap2 et Grap44 sous Grap1
- Exemple: Les uns à droite des autres: Grap4, Grap2 et Grap44 à droite de Grap1
- Exemple: Les uns à gauche des autres: Grap4, Grap2 et Grap44 à gauche de Grap1
- Modification des thèmes de plusieurs graphiques
- Modification du thème des graphiques selon le niveau d’imbrication
- Modification du thème de tous les graphiques
- —- Ajout d’annotation et de style —-
- patchwork nous fournit la fonction “plot_annotation()” afin d’ajouter du texte descriptif à notre assemblage graphique
- Titres
- légendes
- Marquage
- Utilisation: ’1’pour les chiffres arabes, ’A’pour en majuscules lettres latines, ’a’pour les lettres latines minuscules, ’I’pour les chiffres romains en majuscules et ’i’pour les chiffres romains en minuscules.
- —- Enregistrement d’un “patchwork” —-
- Option avancée
Introduction
Les graphiques sont les outils les plus utilisés pour résumer une information chiffrée. Ils résument parfaitements les données et facilitent leurs interprétations. Le package ggplot2 , créé par Hadley Wickham, offre un outil graphique puissant pour créer des tracés élégants et complexes. Basé sur la grammaire graphique, ggplot2 permet de créer des graphiques qui représentent des données numériques et catégorielles à la fois univariées et multivariées de manière simple. Le regroupement peut être représenté par la couleur, le symbole, la taille et la transparence.
Le package patchwork et la fonction ggMarginal de ggExtra sont des extensions du package ggplot2 permettant de facilement combiner des graphiques ggplot dans une même fenêtre graphique.
Dans ce document, nous présenterons le fonctionnement de patchwork et ggMarginal.
Chargement package et description des données
En plus des packages patchwork et fonction ggMarginal de ggExtra, nous aurons besoin de datasets pour charger les données et de ggplot2 pour la création des graphiques.
Les packages patchwork et ggExtra peuvent-être installer directement avec la fonction “install.packages”.
library(ggplot2)
library(patchwork)
library(ggExtra)
library(datasets)Dans ce document, nous utiliseront le jeu de données quakes du package datasets. Le jeu de données fournit les emplacements de 1000 événements sismiques de MB> 4,0 qui se sont produits dans un cube près des Fidji depuis 1964. Il s’agit d’un data-frame de 1000 observations et 5 variables (magnitude, latitude, longitude, profondeur et stations).
Nous avons ajouté au jeu de données la viriable région comprenant les modalités “Ouest” et “Est”. Nous avons aussi arrondit la variable magnitude à l’entier.
#quakes$magFactor <- factor(floor(quakes$mag))
quakes$magFactor <- factor(floor(quakes$mag))
quakes$region <- factor(quakes$long >= 175, labels = c("Ouest", "Est"))
data<-quakes
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 ...
summary(quakes)## lat long depth mag
## Min. :-38.59 Min. :165.7 Min. : 40.0 Min. :4.00
## 1st Qu.:-23.47 1st Qu.:179.6 1st Qu.: 99.0 1st Qu.:4.30
## Median :-20.30 Median :181.4 Median :247.0 Median :4.60
## Mean :-20.64 Mean :179.5 Mean :311.4 Mean :4.62
## 3rd Qu.:-17.64 3rd Qu.:183.2 3rd Qu.:543.0 3rd Qu.:4.90
## Max. :-10.72 Max. :188.1 Max. :680.0 Max. :6.40
## stations magFactor region
## Min. : 10.00 4:802 Ouest:205
## 1st Qu.: 18.00 5:193 Est :795
## Median : 27.00 6: 5
## Mean : 33.42
## 3rd Qu.: 42.00
## Max. :132.00
Package patchwork
Dans un premier temps, nous allons présenter le package patchwork. Comme énoncé dans l’introduction, le Package patchwork permet une présentation panoramique des graphiques de ggplot.
Création des graphiques
Nous avons créé différents types de graphiques avec le package ggplot2.
my3cols <- c("#E7B800", "#2E9FDF", "#FC4E07") # Couleurs
ToothGrowth$dose <- as.factor(ToothGrowth$dose) # Ajout de variable dose
# ---- Création de graphiques ----
Grap1 <- ggplot(quakes, aes(mag, fill = region)) +
geom_histogram(mapping = aes(y = stat(density)),
binwidth = 0.1, color = "white")
Grap11 <- ggplot(ToothGrowth, aes(x = dose, y = len)) +
geom_boxplot(aes(color = dose)) +
scale_color_manual(values = my3cols)
Grap11Grap2 <- ggplot(data = quakes) +
geom_bar(mapping = aes(x = 1, fill = region)) +
coord_polar(theta = "y") + # coordonnées polaires
theme_void() + # thème vide
labs(fill = "classe de\nmagnitude")
Grap2Grap22 <- ggplot(ToothGrowth, aes(x = dose, y = len)) +
geom_dotplot(aes(color = dose, fill = dose), binaxis='y', stackdir='center') +
scale_color_manual(values = my3cols) +
scale_fill_manual(values = my3cols)
Grap22## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Grap3 <- ggplot(data = quakes) +
geom_density(
mapping = aes(x = mag, fill = region),
alpha = 0.5 # niveau d'opacité (0 = transparent, 1 = complètement opaque)
) +
labs(x = "magnitude du séisme") +
labs(y = "densité") +
labs(fill = "région")
Grap3Grap33 <- ggplot(economics, aes(x = date, y = psavert)) +
geom_line(color = "#E46726")
Grap33Grap4 <- ggplot(data = quakes) +
geom_violin(mapping = aes(x = region, y = mag)) +
labs(x = "région") +
labs(y = "magnitude du séisme")
Grap4Grap44 <- ggplot(iris, aes(Sepal.Length)) +
geom_density(aes(color = Species)) +
scale_color_manual(values = my3cols)
Grap44Grap5 <- ggplot(quakes, aes(x = magFactor, y = long, color = region, shape = region)) +
geom_jitter(position = position_jitter(0.2))
Grap5Combinaison de graphique
Pour combiner plusieurs graphiques avec patchwork, il suffit simplement de les additionner.
Faisons la combinaisons des Graphes Grap1, Grap11, Grap3 et Grap33 :
Grap1 + Grap11 + Grap3 + Grap33Agencement vertical et horizontal
En faisant appel à la fonction plot_layout() à l’assemblage, nous pouvons ajuster les mises en page (disposition).
Pour obtenir un agencement Vertical de 3 graphiques, il suffit de fixer ncol = 1.
Grap1 + Grap11 + Grap4 + plot_layout(ncol = 1)Pour obtenir un agencement horizontal de 3 graphiques, on fixe nrow à 1
Grap1 + Grap11 + Grap4 + plot_layout(nrow = 1)Exemple d’ajout d’espace entre les graphiques
Grap2 + plot_spacer() + Grap3Précision des dimensions de chaque graphique
Nous pouvons modifier les dimensions des graphiques en ajoutant plot_layout les arguments heights (pour la hauteur) et width (la largeur).
Grap1 + Grap1 + plot_layout(heights = c(1, 3)) # Modification de la hauteurGrap1 + Grap1 + plot_layout(width = c(3, 1)) # Modification de la largeurGrap1 + Grap33 + Grap4 + Grap22 + Grap5 + Grap44 + plot_layout(heights = c(1, 3))## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Exemple de dispositions imbriquées
Grap1 + Grap22 +
{ Grap11 + { Grap2 + Grap4 + plot_layout(ncol = 1) }
} + Grap5 + plot_layout(nrow = 2)## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Exemple de disposition au même niveau
Nous allons mettre les graphiques “Grap4 + Grap2 + Grap44” et “Grap1” dans le même niveau
Grap4 + Grap2 + Grap44 - Grap1 + plot_layout(ncol = 1) # Meme colonneGrap4 + Grap2 + Grap44 - Grap1 + plot_layout(nrow = 1)# Meme ligneNous pouvons également mettre les graphiques les uns à côté (sur/sous) des autres. patchwork nous fournit respectivement “|” et “/” pour les agencements horizontaux et verticaux
Exemple: les uns sur les autres : Grap4, Grap2 et Grap44 sur Grap1
(Grap4 | Grap2 | Grap44)/Grap1Exemple: les uns sous les autres: Grap4, Grap2 et Grap44 sous Grap1
Grap1/(Grap4 | Grap2 | Grap44)Exemple: Les uns à droite des autres: Grap4, Grap2 et Grap44 à droite de Grap1
Grap1|(Grap4 / Grap2 / Grap44)Exemple: Les uns à gauche des autres: Grap4, Grap2 et Grap44 à gauche de Grap1
(Grap4 / Grap2 / Grap44)|Grap1Modification des thèmes de plusieurs graphiques
Modification du thème des graphiques selon le niveau d’imbrication
(Grap1 + (Grap22 + Grap33) + Grap5 + plot_layout(ncol = 1)) * theme_gray()## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Seuls les thèmes des graphiques Grap1 et Grap5 sont modifiés avec l’opérateur *
Modification du thème de tous les graphiques
(Grap1 + (Grap22 + Grap33) + Grap5 + plot_layout(ncol = 1)) & theme_gray()## `stat_bindot()` using `bins = 30`. Pick better value with `binwidth`.
Grap1 + Grap11 + Grap3 + Grap33labels(c("Grap1", "Grap11", "Grap3", "Grap33"))## [1] "1" "2" "3" "4"
—- Ajout d’annotation et de style —-
assemblage <- Grap1 + Grap11 + Grap3 + Grap33patchwork nous fournit la fonction “plot_annotation()” afin d’ajouter du texte descriptif à notre assemblage graphique
Titres
assemblage + plot_annotation(title = "Combinaison des graphiques") # sous-titres
assemblage + plot_annotation(title = "Combinaison des graphiques",
subtitle = "Mon sous-titre")légendes
assemblage + plot_annotation(title = "Combinaison des graphiques",
subtitle = "Mon sous-titre",
caption = "Ma légende")Marquage
patchwork fournit également une fonctionnalité de marquage automatique qui s’active par la mise “tag_level” en “plot_annotation()”
Utilisation: ’1’pour les chiffres arabes, ’A’pour en majuscules lettres latines, ’a’pour les lettres latines minuscules, ’I’pour les chiffres romains en majuscules et ’i’pour les chiffres romains en minuscules.
assemblage + plot_annotation(title = "Combinaison des graphiques",
subtitle = "Mon sous-titre",
caption = "Légende: Ma légende ici",
tag_levels = 'A')—- Enregistrement d’un “patchwork” —-
GF <- assemblage + plot_annotation(title = "Combinaison des graphiques",
subtitle = "Mon sous-titre",
caption = "Légende: Ma légende ici",
tag_levels = 'A')Fonction ggMarginal du package ggExtra
La fonction ggMarginal [dans le package ggExtra], peut être utilisée pour ajouter facilement un histogramme marginal, une densité ou un boxplot à un nuage de points.
Tout d’abord, créons les tracées de base :
p = ggplot(quakes, aes(x = mag, y = stations, color=stations, size = stations)) + geom_point() +
theme(legend.position="none")Pour obtenir un histogramme marginal, on fixe type = ‘histogram’
mHa = ggMarginal(p, type = 'histogram')
mHa
mHc = ggMarginal(p, type="histogram", fill = "slateblue", xparams = list( bins=10))
mHcPour obtenir une densité marginale, on fixe type = ‘density’
mDa = ggMarginal(p, type = 'density')
mDa
mDc = ggMarginal(p, type="density", fill = "slateblue", xparams = list( bins=10))## Warning: Ignoring unknown parameters: bins
## Warning: Ignoring unknown parameters: bins
mDc Pour obtenir un boxplot marginal, on fixe type = ‘boxplot’
mBa = ggMarginal(p, type = 'boxplot')
mBa
mBc = ggMarginal(p, type="boxplot", fill = "slateblue", xparams = list( bins=10))## Warning: Ignoring unknown parameters: bins
mBcOption avancée
Si notrenuage de points a une variable de facteur mappée à une couleur (c’est-à-dire que les points dans le nuage de points sont codés par couleur en fonction d’une variable dans les données, en utilisant aes(colour = …)), nous pouvons utiliser groupColour = TRUE et/ou groupFill = TRUE pour refléter ces regroupements dans les graphiques marginaux. Il en résulte plusieurs tracés marginaux, un pour chaque groupe de points de couleur.
p <- ggplot(quakes, aes(x = mag, y = stations , colour = region)) +
geom_point(aes(fill = region))
ggMarginal_Final = ggMarginal(p, groupFill = TRUE, groupColour = TRUE)