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!