Programmer en R/Comprendre la grammaire des graphiques
En R, il existe un système de graphique standard autour de la fonction plot()
et la bibliothèque ("librairie" - library) ggplot2
. Cette bibliothèque ggplot2
repose sur les principes de la grammaire des graphiques[1]. L'idée principale est de concevoir un graphique comme une succession de couches (layer). Chaque couche définit une correspondance entre certaines variables ou leur transformation statistique et les attributs esthétiques (position dans l'espace, couleur, épaisseur, etc) de formes géométriques définies (points, barres, lignes, tuiles, etc).
- En pratique, il faut créer le graphique avec la fonction
ggplot()
.
- Ensuite définir les différentes couches avec les fonctions
geom_
(geom_point()
,geom_bar
,geom_line()
, etc) oustat_
(stat_density()
,stat_count()
, etc). Pour chacune de ses fonctions, l'argumentmapping
et la fonctionaes()
permettent de définir la correspondance entre des variables et les attributs esthétiques.
- Puis spécifier les échelles avec les fonctions
scale_
.
- le contexte (titre, sous-titre, caption, etc) avec la fonction
labs()
.
L'utilisateur peut choisir un thème choisi à partir d'une liste de thèmes prédéfinis (theme_tufte()
, theme_stata()
, etc) ou avec la fonction theme()
.
Il est aussi possible de réaliser le graphe sur des sous-échantillons du jeu de données avec les fonctions facet_()
.
Particularité de la grammaire des graphiques, l'opérateur "pipe" est +
. La bibliothèque ggplot2
a été introduite en 2009, avant l'introduction du système des pipes dans le langage R.
Pré-requis
modifierDans cette section, l'exemple utilise la base de données des députés déjà utilisée auparavant, en travaillant avec la bibliothèque ggplot2
.
library(dplyr)
library(ggplot2)
library(readr)
table_deputes <- read_csv("data/table_deputes.csv")
Choix de la géométrie
modifierPour réaliser un diagramme en barres, on utilise la géométrie geom_bar()
. Ici, on associe à l'axe des abscisses le genre et on associe la statistique de comptage au genre.
table_deputes %>%
ggplot() +
geom_bar(
mapping = aes(x = genre),
stat = "count"
)
On peut aussi préciser les échelles, le titre, le sous-titre, etc.
table_deputes %>%
ggplot() +
geom_bar(
mapping = aes(x = genre, fill = genre),
stat = "count"
) +
scale_x_discrete(name = "Genre") +
scale_y_continuous(name = "Nombre de députés") +
scale_fill_discrete() +
labs(
title = "Répartition des députés par genre",
subtitle = "Période 2012-2017",
caption = "Source : Liste des députés publiés par Wikimédia France sur data.gouv.fr"
)
Notes et références
modifierVoir aussi
modifier- Hadley Wickham, « A Layered Grammar of Graphics », Journal of Computational and Graphical Statistics, vol. 19, no. 1, pp. 3–28, 2010.