Ce tutoriel décrit comment créer des bar plots empilés avec ggplot2. Vous apprendrez également comment ajouter des étiquettes à un diagramme à barres empilées.
Sommaire:
Livre Apparenté
GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans RPrérequis
Charger les packages requis et définir la fonction thème theme_minimal()
comme thème par défaut:
library(dplyr) # Pour la manipulation des données
library(ggplot2) # Pour la visualisation des données
theme_set(theme_minimal())
Préparation des données
Les données dérivées du jeu de données “ToothGrowth” sont utilisées. ToothGrowth décrit l’effet de la vitamine C sur la croissance des dents chez les cobayes. On utilise trois doses de vitamine C (0,5, 1 et 2 mg) avec chacune des deux méthodes d’administration [jus d’orange (JO) ou acide ascorbique (VC)] :
df <- data.frame(
supp = rep(c("VC", "OJ"), each = 3),
dose = rep(c("D0.5", "D1", "D2"), 2),
len = c(6.8, 15, 33, 4.2, 10, 29.5)
)
head(df)
## supp dose len
## 1 VC D0.5 6.8
## 2 VC D1 15.0
## 3 VC D2 33.0
## 4 OJ D0.5 4.2
## 5 OJ D1 10.0
## 6 OJ D2 29.5
len
: Longueur des dentsdose
: Dose en milligrammes (0,5, 1, 2)supp
: type de supplément (VC ou OJ)
Graphiques basiques
p <- ggplot(df, aes(x = dose, y = len))+
geom_col(aes(fill = supp), width = 0.7)
p
Ajouter des étiquettes
4 étapes nécessaires pour calculer la position des étiquettes de texte:
- Regrouper les données en fonction de la variable dose
- Trier les données par colonnes
dose
etsupp
. Comme le graphique empilé inverse l’ordre des groupes, la colonnesupp
doit être triée par ordre décroissant. - Calculez la somme cumulée de
len
pour chaque catégorie de “dose”. Utilisé comme coordonnées y des étiquettes. Pour placer l’étiquette au milieu des barres, nous allons utilisercumsum(len) - 0.5 * len
. - Créer le bar plot et ajouter des étiquettes
# Organiser/trier et calculer les sommes cumulatives
library(dplyr)
df2 <- df %>%
group_by(dose) %>%
arrange(dose, desc(supp)) %>%
mutate(lab_ypos = cumsum(len) - 0.5 * len)
df2
## # A tibble: 6 x 4
## # Groups: dose [3]
## supp dose len lab_ypos
## <fct> <fct> <dbl> <dbl>
## 1 VC D0.5 6.8 3.4
## 2 OJ D0.5 4.2 8.9
## 3 VC D1 15 7.5
## 4 OJ D1 10 20
## 5 VC D2 33 16.5
## 6 OJ D2 29.5 47.8
# Créer des barplots empilés avec des étiquettes
p <- ggplot(data = df2, aes(x = dose, y = len)) +
geom_col(aes(fill = supp), width = 0.7)+
geom_text(aes(y = lab_ypos, label = len, group =supp), color = "white")
p
Bar plots personnalisés
Utilisez la fonction scale_fill_manual()
pour définir manuellement les couleurs des lignes de bordure et les couleurs de remplissage des barres.
p + scale_fill_manual(values = c("#0073C2FF", "#EFC000FF"))
Version: English
No Comments