ggplot2 barplots : Guide de démarrage rapide - Logiciel R et visualisation de données
Ce tutoriel R décrit comment créer un graphique en barre (barplots) en utilisant le logiciel R et le package ggplot2.
La fonction geom_bar() peut être utilisée.
Barplots basiques
Données
Des données dérivées de la table ToothGrowth sont utilisées. ToothGrowth décrit l’effet de la Vitamine C sur la croissance des dents des porcs guinéens.
df <- data.frame(dose=c("D0.5", "D1", "D2"),
len=c(4.2, 10, 29.5))
head(df)
## dose len
## 1 D0.5 4.2
## 2 D1 10.0
## 3 D2 29.5
- len : Longueur des dents
- dose : Dose en milligrammes (0.5, 1, 2)
Créer un barplot
library(ggplot2)
# Barplot basique
p<-ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity")
p
# Barplot horizontal
p + coord_flip()
Changer la largeur et la couleur des barres:
# Changer la largeur des barres
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", width=0.5)
# Changer les couleurs
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", color="blue", fill="white")
# Thème minimal + couleur de remplissage bleue
p<-ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", fill="steelblue")+
theme_minimal()
p
Choisir les groupes à afficher:
p + scale_x_discrete(limits=c("D0.5", "D2"))
Barplot avec des annotations
# En dehors des barres
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", fill="steelblue")+
geom_text(aes(label=len), vjust=-0.3, size=3.5)+
theme_minimal()
# A l'intérieur des barres
ggplot(data=df, aes(x=dose, y=len)) +
geom_bar(stat="identity", fill="steelblue")+
geom_text(aes(label=len), vjust=1.6, color="white", size=3.5)+
theme_minimal()
Barplot du comptage des observations
Dans le code R ci-dessus, nous avons utilisé l’argument stat = “identity” pour faire des barplots. Notez que, la valeur par défaut de l’argument stat est bin. Dans ce cas, la hauteur des barres représentent le comptage des cas dans chaque catégorie.
Pour faire le barplot du comptage, nous allons utiliser le jeu de données mtcars:
head(mtcars)
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225 105 2.76 3.460 20.22 1 0 3 1
# Ne rien affecter à l'argument y
ggplot(mtcars, aes(x=factor(cyl)))+
geom_bar(stat="bin", width=0.7, fill="steelblue")+
theme_minimal()
Changer la couleur des barplots par groupes
Changer la couleur des traits des barres
La couleur des traits du barplot peut être automatiquement contrôlée par les niveaux de la variable dose:
# Changer la couleur des traits du barplot par groupes
p<-ggplot(df, aes(x=dose, y=len, color=dose)) +
geom_bar(stat="identity", fill="white")
p
Il est aussi possible de changer manuellement la couleur des traits du barplot en utilisant les fonctions:
- scale_color_manual() : pour utiliser des couleurs personnalisées
- scale_color_brewer() : pour utiliser les palettes de couleurs du package RColorBrewer
- scale_color_grey() : pour utiliser la palette de couleurs grises
# Utiliser des couleurs personnalisées
p+scale_color_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# Utiliser les palettes RColorBrewer
p+scale_color_brewer(palette="Dark2")
# Utiliser la palette de couleurs grises
p + scale_color_grey() + theme_classic()
Lire plus sur ggplot2 et les couleurs ici: ggplot2 couleurs
Changer les couleurs de remplissage du barplot
Dans le code R ci-dessous, les couleurs de remplissage du barplot sont automatiquement contrôlées par les niveaux de la variable dose:
# Changer la couleur par groupes
p<-ggplot(df, aes(x=dose, y=len, fill=dose)) +
geom_bar(stat="identity")+theme_minimal()
p
Il est aussi possible de changer manuellement les couleurs de remplissage du barplot en utilisant les fonctions:
- scale_fill_manual() : pour utiliser des couleurs personnalisées
- scale_fill_brewer() : pour utiliser les palettes de couleurs du package RColorBrewer
- scale_fill_grey() : pour utiliser la palette de couleurs grises
# Utiliser des couleurs personnalisées
p+scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))
# Utiliser les palettes RColorBrewer
p+scale_fill_brewer(palette="Dark2")
# Utiliser la palette de couleurs grises
p + scale_fill_grey()
Changer la couleur des traits en noir:
ggplot(df, aes(x=dose, y=len, fill=dose))+
geom_bar(stat="identity", color="black")+
scale_fill_manual(values=c("#999999", "#E69F00", "#56B4E9"))+
theme_minimal()
Lire plus sur ggplot2 et les couleurs ici: ggplot2 couleurs
Changer la position de la légende
# Changer les couleurs de remplissage en bleu (palette = "Blues")
p <- p+scale_fill_brewer(palette="Blues")
p + theme(legend.position="top")
p + theme(legend.position="bottom")
# Supprimze la légende
p + theme(legend.position="none")
Les valeurs possibles pour l’argument legend.position sont : “left”,“top”, “right”, “bottom”.
Lire plus sur ggplot2 et légende: ggplot2 légende
Changer l’ordre des éléments dans la légende
La fonction scale_x_discrete peut être utilisée pour changer l’ordre des éléments en “2”, “0.5”, “1”:
p + scale_x_discrete(limits=c("D2", "D0.5", "D1"))
Barplot avec plusieurs groupes
Données
Des données dérivées de la table ToothGrowth sont utilisées. Il décrit l’effet de la Vitamine C sur la croissance des dents des porcs guinéens. Trois doses de Vitamine C (0.5, 1 et 2 mg) avec chacune des méthodes de livraison [orange juice (OJ) ou ascorbic acid (VC)] sont utilisées:
df2 <- 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(df2)
## 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 dents
- dose : Dose en milligrammes (0.5, 1, 2)
- supp : Type de supplément (VC or OJ)
Créer des barplots
Un barplot empilé est créé par défaut. Vous pouvez utiliser la fonction position_dodge() pour changer cela. Le remplissage des barplots est contrôlé par les niveaux de la variable dose :
# Barplots empilés avec plusieurs groupes
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity")
# Utiliser position = position_dodge()
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge())
Changer les couleurs manuellement:
# Changer les couleurs manuellement
p <- ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", color="black", position=position_dodge())+
theme_minimal()
# Couleurs personnalisées
p + scale_fill_manual(values=c('#999999','#E69F00'))
# palettes de couleurs de type brewer
p + scale_fill_brewer(palette="Blues")
Ajouter des annotations
Ajouter des étiquettes sur un barplot groupé:
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge())+
geom_text(aes(label=len), vjust=1.6, color="white",
position = position_dodge(0.9), size=3.5)+
scale_fill_brewer(palette="Paired")+
theme_minimal()
Ajouter des étiquettes sur un barplot empilé: 3 étapes sont nécessaires
- Trier les données en fonction des variables dose et supp : le package plyr est utilisé
- Calculer la somme cumulée de la variable len pour chaque dose
- Créer le graphique
library(plyr)
# Trier en fonction de dose et supp
df_sorted <- arrange(df2, dose, supp)
head(df_sorted)
## supp dose len
## 1 OJ D0.5 4.2
## 2 VC D0.5 6.8
## 3 OJ D1 10.0
## 4 VC D1 15.0
## 5 OJ D2 29.5
## 6 VC D2 33.0
# Calculer la somme cumulée de len pour chaque dose
df_cumsum <- ddply(df_sorted, "dose",
transform, label_ypos=cumsum(len))
head(df_cumsum)
## supp dose len label_ypos
## 1 OJ D0.5 4.2 4.2
## 2 VC D0.5 6.8 11.0
## 3 OJ D1 10.0 10.0
## 4 VC D1 15.0 25.0
## 5 OJ D2 29.5 29.5
## 6 VC D2 33.0 62.5
# Créer le barplot
ggplot(data=df_cumsum, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity")+
geom_text(aes(y=label_ypos, label=len), vjust=1.6,
color="white", size=3.5)+
scale_fill_brewer(palette="Paired")+
theme_minimal()
Si vous voulez placer les étiquettes au milieu des barres, vous devez modifier la somme cumulée comme suit:
df_cumsum <- ddply(df_sorted, "dose",
transform,
label_ypos=cumsum(len) - 0.5*len)
# Créer le barplot
ggplot(data=df_cumsum, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity")+
geom_text(aes(y=label_ypos, label=len), vjust=1.6,
color="white", size=3.5)+
scale_fill_brewer(palette="Paired")+
theme_minimal()
Barplot avec axe des x de type numérique
Si la variable sur l’axe des x est de type numérique, il peut être utile de le traiter comme une variable de type facteur ou continue, selon ce que vous souhaitez faire:
# Créer des données
df2 <- data.frame(supp=rep(c("VC", "OJ"), each=3),
dose=rep(c("0.5", "1", "2"),2),
len=c(6.8, 15, 33, 4.2, 10, 29.5))
head(df2)
## supp dose len
## 1 VC 0.5 6.8
## 2 VC 1 15.0
## 3 VC 2 33.0
## 4 OJ 0.5 4.2
## 5 OJ 1 10.0
## 6 OJ 2 29.5
# axe des x traité comme variable continue
df2$dose <- as.numeric(as.vector(df2$dose))
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge())+
scale_fill_brewer(palette="Paired")+
theme_minimal()
# Axe des x traité comme variable discrete
df2$dose<-as.factor(df2$dose)
ggplot(data=df2, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge())+
scale_fill_brewer(palette="Paired")+
theme_minimal()
Barplot avec barres d’erreur
Tout d’abord, la fonction ci-dessous sera utilisée pour calculer la moyenne et l’écart type, pour la variable d’intérêt, dans chaque groupe:
#+++++++++++++++++++++++++
# Fonction pour calculer la moyenne et l'écart-type
# pour chaque groupe
#+++++++++++++++++++++++++
# data : une data frame
# varname: le nom de la colonne contenant la variable
# d'intérêt
# groupnames : vecteur contenant les noms des colonnes à utiliser
# comme des variables de grouping
data_summary <- function(data, varname, groupnames){
require(plyr)
summary_func <- function(x, col){
c(mean = mean(x[[col]], na.rm=TRUE),
sd = sd(x[[col]], na.rm=TRUE))
}
data_sum<-ddply(data, groupnames, .fun=summary_func,
varname)
data_sum <- rename(data_sum, c("mean" = varname))
return(data_sum)
}
Résumé statistique des données:
df3 <- data_summary(ToothGrowth, varname="len",
groupnames=c("supp", "dose"))
# Convert dose to a factor variable
df3$dose=as.factor(df3$dose)
head(df3)
## supp dose len sd
## 1 OJ 0.5 13.23 4.459709
## 2 OJ 1 22.70 3.910953
## 3 OJ 2 26.06 2.655058
## 4 VC 0.5 7.98 2.746634
## 5 VC 1 16.77 2.515309
## 6 VC 2 26.14 4.797731
La fonction geom_errorbar() est utilisée:
# L'écart type est utilisé comme barre d'erreur
p <- ggplot(df3, aes(x=dose, y=len, fill=supp)) +
geom_bar(stat="identity", position=position_dodge()) +
geom_errorbar(aes(ymin=len-sd, ymax=len+sd), width=.2,
position=position_dodge(.9))
p + scale_fill_brewer(palette="Paired") + theme_minimal()
Barplots personnalisés
# Changer les couleurs par groupes
# Ajouter les barres d'erreur
p + labs(title="Plot of length per dose",
x="Dose (mg)", y = "Length")+
scale_fill_manual(values=c('black','lightgray'))+
theme_classic()
Changer les couleurs de remplissage manuellement :
# Greens (vert)
p + scale_fill_brewer(palette="Greens") + theme_minimal()
# Reds (rouge)
p + scale_fill_brewer(palette="Reds") + theme_minimal()
Infos
Cette analyse a été faite en utilisant le logiciel R (ver. 3.1.2) et le package ggplot2 (ver. 1.0.0)
Show me some love with the like buttons below... Thank you and please don't forget to share and comment below!!
Montrez-moi un peu d'amour avec les like ci-dessous ... Merci et n'oubliez pas, s'il vous plaît, de partager et de commenter ci-dessous!