Le package ggplot2
permet de réaliser facilement des graphiques avec une syntaxe unifiée. Dans ce tutoriel, nous allons nous entraîner avec les données "nutrimenu".
La commande de base aura l'allure suivante
ggplot(data, aes(x, y)) + geom_****()
Où
ggplot
dessine le canevas de basedata
est une data-frame contenant toutes les informations nécessaires au dessin du grapheaes()
est une fonction qui permet de déclarer les paramètres esthétiques du graphe (les coordonnées des points, des lignes ou des barres, la façon de les colorer, les étiquettes etc...)geom_****
est une fonction qui spécifie une "couche de dessin"Dans ce tuto, nous verrons les fonctions suivantes :
Fonction | Utilité |
---|---|
geom_bar , geom_col |
Diagrammes en bâtons |
geom_point , geom_jitter |
Nuages de points |
geom_line |
Dessins de lignes |
geom_histogram |
Histogrammes |
geom_boxplot |
Boites à moustaches |
geom_density |
Densités |
geom_violin |
Diagrammes en violon |
Tout en faisant les exercices, familiarisez vous avec la documentation de ggplot2 : https://ggplot2.tidyverse.org/
Complétez la commande suivante pour obtenir un diagramme en bâtons des types de recettes
ggplot( ) + geom_
ggplot(nutrimenu, aes(Type)) + geom_bar()
Changez les couleurs et le thème du graphe en complétant la prochaine commande.
ggplot( , aes(fill = )) +
geom_ +
theme_
ggplot(nutrimenu , aes(Type, fill = Type)) +
geom_bar() +
theme_bw()
Utilisez la fonction cut
de la façon suivante pour transformer la variable Proteines (continue) en une variable qualitative.
cut(nutrimenu$Proteines, c(-1, 6, 14))
# Il n'y a rien de plus à faire : exécutez juste la commande et observez son résultat
cut(nutrimenu$Proteines, c(-1, 6, 14))
# Si vous le souhaitez, vous pouvez utiliser la fonction table sur ce résultat
table(cut(nutrimenu$Proteines, c(-1, 6, 14)))
Remarquez comme on peut utiliser cette astuce dans un graphe !
ggplot(nutrimenu, aes(cut(Proteines, c(-1, 6, 14)))) +
geom_bar() +
theme_bw()
Ce n'est pas très joli comme commande et un peu difficile a lire. Parfois, plutôt que d'imbriquer les commandes, il vaut mieux créer une nouvelle variable et utiliser cette nouvelle variable dans la commande graphique.
Complétez la fonction suivante pour réaliser un boxplot de la variable Energie.
ggplot(nutrimenu) + geom
ggplot(nutrimenu, aes(Energie)) +
geom_boxplot() +
theme_bw()
Sur le même modèle, faites un diagramme en violon.
ggplot(nutrimenu) + geom
ggplot(nutrimenu, aes(x = Energie, y = 0)) +
geom_violin() +
theme_bw()
Superposez les deux et ajustez les paramètres de largeur et de couleur pour avoir un joli graphe.
ggplot(nutrimenu) +
geom_violin() +
geom_boxplot()
## Utilisez la fonction theme
### - sur l'élément axis.text.y
### - et sur l'élément axis.ticks.y
### - que vous devrez transformer en element_blank()
ggplot(nutrimenu, aes(x = Energie, y = 0)) +
geom_violin(color = NA, fill = "limegreen") +
geom_boxplot(width = 0.1, color = "steelblue", fill = "lightgreen", size = 1) +
theme_bw() +
labs(x = "", y = "Energie (kCal/100 g)") +
theme(axis.text.y = element_blank(),
axis.ticks.y = element_blank())
Faites maintenant un histogramme de la composition en Lipides.
ggplot(nutrimenu) +
geom
ggplot(nutrimenu, aes(Lipides)) +
geom_histogram(breaks = seq(0, 30, 5), color = "white", fill = "goldenrod") +
theme_bw() +
labs(x = "Lipides (g/100 g)", y = "Nb. d'occurences")
Exécutez la commande suivante puis modifiez la pour faire en sorte que chaque boite soit d'une couleur différente.
ggplot(nutrimenu, aes(Type, Glucides)) + geom_boxplot()
ggplot(nutrimenu, aes(Type, Glucides, color = Type)) +
geom_boxplot() +
theme_bw() +
coord_flip() +
labs(x = "", y = "Glucides (g/100 g)", color = "")
J'ai sélectionné 3 couleurs pour vous, et utilisé la commande suivante pour les stocker dans un vecteur s'appelant couleurs
.
couleurs <- c("steelblue", "limegreen", "darkolivegreen")
Ce vecteur est utilisé ci-dessous. Exécutez ce code et observez le résultat. Essayez ensuite d'autres couleurs de votre choix : utilisez des noms de couleur (voir le résultat de la fonction colors()
) ou des codes hexadécimaux.
couleurs <- c("steelblue", "limegreen", "darkolivegreen")
ggplot(nutrimenu, aes(Fibres, Type, fill = Type)) +
geom_violin() +
scale_fill_manual(values = couleurs)
Complétez la commande suivante pour représenter l'énergie en fonction de la teneur en Glucides des recettes.
ggplot() + geom
Coloriez les points, d'abord avec la variable Proteines puis avec la variable Type. Que Remarquez vous ?
ggplot() + geom
ggplot(nutrimenu, aes(Glucides, Energie, color = Proteines)) +
geom_point() +
theme_bw() +
labs(y = "Energie (kCal / 100g)", y = "Glucides (g/100 g)")
ggplot(nutrimenu, aes(Glucides, Energie, color = Type)) +
geom_point() +
theme_bw() +
labs(y = "Energie (kCal / 100g)", y = "Glucides (g/100 g)")
Vous pouvez changer des couleurs définies sur une variable quantitative avec la fonction scale_color_continuous
, ou scale_color_gradient
, ou scale_color_gradientn
, ou des couleurs définies sur une variable discrète avec la fonction scale_color_manual
ou scale_colour_brewer
. Testez ces fonctions sur l'exemple précédent.
Les fonctionnalités du package ggpubr
permettent, entre autres, de combiner des graphes à partir d'objets ggplot
.
Remarque : d'autres package existent pour combiner des objets ggplot
en graphes complexes, comme cowplot
, gridExtra
ou patchwork
, ce qui témoigne du succès de ggplot2
.
Exécutez les commandes suivantes et observez comment elles permettent la création d'un graphe complexe en plusieurs panneaux.
library(ggpubr)
theme_set(theme_bw())
# boxplots
bxp <- ggplot(nutrimenu, aes(Type, Glucides, color = Type)) + geom_boxplot()
# jitter plots
jp <- ggplot(nutrimenu, aes(x = Type, y = Glucides, color = Type)) + geom_jitter()
# violin plots
vp <- ggplot(nutrimenu, aes(Type, Glucides, color = Type, fill = Type)) + geom_violin()
# violin plots
dens <- ggplot(nutrimenu, aes(Glucides, fill = Type)) + geom_density()
# Arrange
ggarrange(bxp, jp, vp, dens, ncol = 2, nrow = 2, common.legend = TRUE, legend = "bottom")
Voici les arguments clefs de la fonction ggarrange.
N'oubliez pas que vous pouvez accéder à ces informations et bien plus en appelant le fichier d'aide de la fonction grâce à la commande ?ggarrange
.
Argument | Utilité |
---|---|
ncol |
Nombre de colonnes de la grille de graphes. |
nrow |
Nombre de lignes de la grille de graphes. |
widths |
Vecteur des largeurs des graphes. |
heights |
Vecteur des hauteurs des graphes. |
legend |
Chaîne de caractère spécifiant la position de la légende ("top" , "bottom" , "left" ou "right" ). Pour supprimer la légende, utilisez "none" . |
common.legend |
Valeur logique. La valeur par défaut est FALSE . Si TRUE , une légende unique commune sera créée. |