Module Création de graphiques avec ggplot2
20/02/2025
1 - Le package ggplot2 | 8 - Les courbes |
2 - Initialisation d’un graphique | 9 - Les camemberts |
3 - Les différentes géométries de graphiques | 10 - Les boîtes à moustaches |
4 - Croisement avec une autre variable | 11 - Ajout de libellés |
5 - Les diagrammes en barres | 12 - Habillage du graphique |
6 - Les histogrammes | 13 - Sauvegarde du graphique |
7 - Les nuages de points | 14 - Liens |
Ce diaporama de formation a été rédigé dans le but d’être le support visuel des formations dispensées au MASA.
Ces formations s’adressent à des agents qui ont suivi la formation R initiation.
Elles sont données en présentiel sur une durée de trois journée, les modules de cette formation sont ajustables suivants le choix des agents.
Champ couvert par cette formation
Ce support couvre les rappels et complèments sur R et l’environnement du Minsitère.
Pour information, Les Modules de la formation R-perfectionnement sont:
01 - Module Rappels
02 - Module Fonctions
03 - Module Cartes statiques et interactives
04 - Module Création de graphiques avec ggplot2
05 - Module Quarto
06 - Module Parquet
07 - Module Initiation à l’écriture d’applications Shiny
Ils sont orientés pour être utiles aux agents du SSM MASA et se concentrent sur une utilisation de R via RStudio qui est mise à disposition des agents sur la plateforme interne Cerise basée sur RStudio Workbench.
Le package ggplot2 :
Créé par Hadley Wickham
Construit autour de la « grammaire des graphiques » (gg) qui décompose chaque graphique en un ensemble d’éléments sur lesquels le package permet de jouer indépendamment
Objectif : réaliser des graphiques complexes et personnalisés à partir d’un fichier détail, d’un fichier détail pondéré ou de données agrégées
Site officiel : http://ggplot2.tidyverse.org/reference/
Un graphique est composé:
aes()
geom_*
facet_*
scale_*
coord_*
theme()
Un graphique s’initialise avec la fonction ggplot()
puis chaque élément est ajouté aux autres avec un +
Initialisation du graphique avec la fonction ggplot().
On déclare :
data
: la table contenant les données à représenter
mapping
: éventuellement, la ou les variables à représenter L’argument mapping requiert l’utilisation de la fonction aes() (pour aesthetic mappings). Les variables à représenter sont indiquées dans cette fonction par les paramètres x et y.
⇒ ce sont les bases du graphique, sur lesquelles on va afficher ensuite les données
Initialisation d’un graphique, les axes x et y sont créés mais aucune géométrie n’est utilisée pour représenter les données.
aes()
L’appel de la fonction aes()
peut se faire :
ggplot()
Les 3 écritures sont équivalentes.
Par défaut, chaque fonction de géométrie hérite des paramètres esthétiques précédents.
Déclaration de la géométrie du graphique avec les fonctions de la forme geom_XXX().
Les géométries les plus courantes sont :
geom_bar() et geom_col()
→ graphiques en barres (équivalent de barplot())
geom_histogram()
→ histogramme (équivalent de hist())
geom_point()
→ nuage de points (équivalent de plot())
geom_line()
→ points reliés par un segment
geom_boxplot()
→ boxplot (équivalent de boxplot())
On peut distinguer les observations appartenant à des classes différentes au sein d’une distribution. Pour cela, il faut renseigner, selon le cas, les arguments suivants dans la fonction aes()
:
fill : pour une différenciation par remplissage
colour : pour une différenciation par couleur de bordure
shape : pour une différenciation par forme
size : pour une différenciation par taille
alpha : pour une différenciation par transparence
linetype : type de lignes (continue, pointillées…)
linewidth : taill des lignes
La fonction aes()
fait le lien entre les données et le rendu visuel du graphique.
Pour modifier un attribut, on utilise les mêmes noms de paramètres, mais on peut les placer à l’intérieur ou à l’extérieur de la fonction aes() selon l’effet souhaité :
Pour modifier un attribut sans le relier aux valeurs d’une variable dans le jeu de données → on le définit dans la fonction de géométrie, à l’extérieur de la fonction aes() : cela s’appliquera alors à l’ensemble du graphique.
Pour faire varier un attribut en fonction des valeurs prises par une autre variable → on le définit à l’intérieur de la fonction aes()
Les diagrammes en barres avec geom_bar()
:
On peut construire un diagramme en barres à partir :
Cet argument précise que la hauteur des barres n’est pas obtenue par comptage mais qu’elle est identique à la variable renseignée dans l’argument y de la fonction aes()
Le paramètre stat précise qu’il faut utiliser la valeur de la variable y pour calculer la hauteur des barres.
Remarque : geom_col()
est un raccourci pour utiliser geom_bar()
avec stat = identity
.
Pour rendre le graphique plus facile à lire, il est utile de :
⇒ fonction reorder() pour réordonner les modalités d’une variable selon les effectifs d’une autre variable
Intervertir l’axe des x et des y
On peut croiser les données avec une seconde variable en renseignant l’argument fill dans la fonction aes()
.
Trois dispositions sont alors possibles pour ces données, à choisir dans l’argument position de la fonction geom_bar() :
position = “stack” : par défaut, empilées en nombre
position = “dodge” : placées côte à côte en nombre
position = “fill” : empilées en fréquence (total de chaque barre=1)
Les histogrammes avec geom_histogram()
:
Objectif : représenter la distribution d’une variable quantitative continue
La fonction geom_histogram() possède deux arguments pour gérer la largeur des barres :
bins : fixe le nombre de barres de l’histogramme
binwidth : fixe la largeur des barres dans l’unité de la variable représentée
On peut croiser les données avec une variable qualitative en renseignant l’argument fill dans la fonction aes().
Les arguments boundary et closed de la fonction geom_histogram() peuvent être utiles dans certains cas d’usage.
La fonction geom_freqpoly() permet de construire un polygone de fréquence pour chaque classe de la variable de croisement
Les nuages de points avec geom_point()
:
Objectif : croiser deux variables dans un graphique de coordonnées cartésiennes
On peut croiser les observations avec :
une variable qualitative en utilisant davantage l’argument colour ou shape de la fonction aes()
(ou fill pour certaines formes de points)
une variable quantitative en utilisant l’argument size de la fonction aes()
On peut aussi créer un graphique pour chaque modalité de la variable de croisement avec la fonction facet_wrap()
On peut ajouter une droite de régression linéaire sur un graphe construit comme un nuage de points en utilisant la fonction geom_smooth(method = “lm”).
Pour ajouter une droite de régression linéaire qui tient compte des pondérations, il faut :
Les courbes avec geom_line()
:
Objectif : réaliser une courbe, en reliant les points d’un nuage de points par des segments, notamment à partir d’une variable temporelle en abscisse
Le format de la table en entrée est particulier, il ne doit y avoir qu’une valeur d’ordonnées par valeur d’abscisse
On peut croiser les données avec une variable qualitative et obtenir autant de courbes que de modalités de la variable.
Exemple : réaliser sur un même graphique les courbes d’évolution de la part de l’agriculture dans le PIB pour quatre pays de l’Union Européenne.
Voilà les données initiales :
Il faut créer une variable qualitative correspondant au pays
evol_partagri_pib_UE2 <- evol_partagri_pib_UE %>%
pivot_longer(
cols = Allemagne:RU,
names_to = "PAYS",
values_to = "partAgri_PIB")
Les camemberts aec geom_bar()
+ coord_polar()
Attention
Il n’existe pas de fonction dans le package ggplot2 permettant de construire directement un camembert. Pour ce faire, il faut utiliser la fonction geom_bar()
et changer par ailleurs le système de coordonnées en coordonnées polaires
Les boîtes à moustache avec geom_boxplot()
Objectif : représenter la répartition d’une variable quantitative autour des quartiles de sa distribution
Éventuellement, représenter cette répartition selon les modalités d’une variable qualitative : il y a alors donc deux variables à renseigner en paramètres
x : variable qualitative de croisement
y : variable quantitative à croiser
La fonction geom_text()
permet d’ajouter un libellé sur les points souhaités d’un graphique
Habillage du graphique :
Ajout d’annotation
Gestion des axes
Modification du thème
Ajout de titre, sous-titre, source, libellés de légende…
On modifie l’échelle des axes avec les fonctions préfixées scale_XXX()
et leurs arguments breaks :
scale_x_discrete()
: gérer l’axe des x d’une variable qualitative
scale_x_continuous()
* : gérer l’axe des x d’une variable continue
scale_x_manual()
: gérer manuellement l’axe des x
scale_fill_manual()
: gérer manuellement la variable de croisement de type fill
scale_colour_manual()
: gérer manuellement la variable de croisement de type colour
theme()
. De nombreux paramètres à consulter dans l’aide de la fonction permettent de modifier chaque élément d’un graphique.Par exemple, pour supprimer le fond gris d’un graphique et transformer les lignes des axes en lignes grises d’épaisseur 0,2, il faut ajouter le bloc suivant au code du graphique :
On peut modifier l’ensemble des libellés avec la fonction labs()
title = titre du graphique
subtitle = sous-titre
x,y = noms des axes
fill, colour, size, alpha = intitulé de la légende
caption = source de données
Attention à l’argument limits de la fonction scale_x_continuous()
qui enlève les données hors de l’intervalle.
Selon que celui-ci est ouvert ou fermé, ggplot2 peut supprimer des barres.
=> Pour zoomer sur un graphique, la bonne pratique est d’utiliser la fonction coord_cartesian()
et son argument xlim.
On peut également sauvegarder un graphique avec la fonction ggsave()
possibilité d’exporter au format pdf, svg, png, etc. → il suffit de l’indiquer dans l’extension du nom de fichier en sortie
par défaut, la fonction exporte le dernier graphique possibilité de choisir la taille et la résolution du graphique exporté
Des exemples de graphiques inspirants (à mettre en favoris) https://www.r-graph-gallery.com/
Le livre de recette de ggplot2 (UN MUST) https://r-graphics.org/
Un flipbook pour bien comprendre la superposition des éléments d’un graphique. Par exemple https://evamaerey.github.io/ggplot_flipbook/ggplot_flipbook_xaringan.html#1
Une liste des différentes extensions de ggplot2 https://exts.ggplot2.tidyverse.org/gallery/
Le package {esquisse} pour construire une ébauche de graphique et générer le code => https://dreamrs.shinyapps.io/esquisse/
Exercice 1
À partir des données de la base prenoms :
Indication : agréger d’abord les données pour l’ensemble des départements pour obtenir le nombre total d’enfants prénommés «Camille» pour chaque année depuis 2000.
Tracer la courbe de l’évolution du nombre de naissances de « Camille » selon le sexe de l’enfant.
Pour aller plus loin : ajouter au graphique la courbe représentant le total (F+G) et mettre en pointillés les deux autres courbes.