Boîtes à moustaches et diagrammes en violon avec R
L'essentiel de cette page
Voici comme faire des boîtes à moustaches ou des diagrammes en violons, mais aussi comment ajouter des lettres de significativités lorsque l'on fait de la comparaison de moyennes, médianes ou rangs.
Tracer une boîte à moustaches
Dans une boîte à moustaches, vous visualiser les 3 quartiles, les valeurs min et max.
Certains points ressortent comme particulier si leur distance du quartile inférieur ou supérieur dépassent l'IQR de 50% (distance inter-quartile X 1,5).
Tracer une boîte à moustaches.
x <- c(1:10)
boxplot(x)
Tracer une ou plusieurs boîtes à moustaches sur le même graphique (cf. rubrique plus bas pour le faire automatiquement)/
x <- c(1:10) ; y <- rnorm(100,5,2) ;z <- rnorm(100,5,2)
boxplot(x)
boxplot(x,y, z,names=c("X","Y","Z"))
# x, y et z ici sont 3 listes (vecteurs) <=> cela donne 3 boîtes à moustaches.
Tracer une boîte à moustaches horizontale
boxplot(x,horizontal=T)
Ajouter un titre
boxplot(x, main="titre")
Ajouter un titre à l'axe des abscisses
boxplot(x, xlab="titre de l'axe (unités)")
Légender les boîtes à moustaches
Le paramètre names permet de donner des noms aux boîtes
G = rnorm(100)*8+177 ; F = rnorm(100)*8+168 # Données simulées
boxplot(G,F, names = c("Garçons", "Filles")) # names est incompatible avec xlab
Superposer une droite au graphique
x = c(1,2,3,4,5,4,3,2,1,4,3)
boxplot(x)
abline(h = 3, col="red", lwd=3, lty=3) # h pour tracer une horizontale
# col : couleur du trait
# lwd : épaisseur du trait
# lty : trait en pointillés ou non
Changer la couleur des boîtes
a = c(1,2,3,4,5,4,3,2,1,4,3)
b = c(1,2,4,4,4,4,3,4,1,4,3)
c = c(1,7,3,4,5,7,3,2,1,7,3)
boxplot(a,b,c, col=c("red","orange","#FF8000"))
Changer la position des boîtes
paramètre at
Et quand j'ai plusieurs catégories dans une liste ? Rien de plus simple : je peux le faire avec la commande plot().
# Prenons le jeu de data iris dont les catégories sont indiquées dans la 5ème colonne
plot(iris[,1]~factor(iris[,5]),xlab="Boîtes à moustaches",ylab="Mesure",col="#FCD203")
Tracer un diagramme en violon
Le diagramme en violon (diagramme en haricot, violin plot ou vioplot, lien externe) permet de faire à la fois le travail de la boîte à moustaches et celui d'un histogramme. Il permet ainsi de traduire la répartition et la fréquence d'un ensemble de échantillon de valeurs. Il s'agit en réalité de boîte à moustaches avec estimation par noyau associée.
Pour tracer ce type de diagramme, il faut nécessairement installer et exécuter la librairie (package) vioplot dans le logiciel R.
Tracer un ou plusieurs diagrammes en violon
1. Installer et exécuter le package/librairie nécessaire pour pouvoir tracer des diagrammes en violon
install.packages("vioplot") # installation
library(vioplot) # exécution
2. Tracer un diagramme en violon avec le logiciel R project
# exemple :
x = rpois(10000,80) # x, valeurs à remplacer par les votres
vioplot(x)
3. Tracer plusieurs diagrammes en violon sur le même graphique.
# x, y et z ici sont 3 listes (vecteurs)
vioplot(x,y, z,names=c("X","Y","Z"))
Mettre en forme le diagramme
Tracer une boîte à moustaches horizontale.
vioplot(x,horizontal=T)
Ajouter un titre principal, sous-titre ou des titres aux axes
vioplot(x)
title(ylab = "axe y", main="Titre 1",sub="sous-titre")
Superposer une droite au graphique
x = c(1,2,3,4,5,4,3,2,1,4,3)
vioplot(x)
abline(h = 3, col="red", lwd=3, lty=3) # h pour tracer une horizontale
# col : couleur du trait
# lwd : épaisseur du trait
# lty : trait en pointillés ou non
Changer la couleur des violons
Attention : tous les violons ont forcément la même couleur
a = c(1,2,3,4,5,4,3,2,1,4,3)
vioplot(a, col="orange")
Diagramme à violon avec position personnalisée et couleurs variables
x = rpois(100,80) ;y = rpois(1000,60) ;z = rpois(500,70)
plot(c(0,4),c(min(c(x,y,z)),max(c(x,y,z))),col="white",type="n",axes=F,xlab="",ylab="")
axis(2) # Ajoute l'axe des y à gauche
mtext("Paramètre",side=2,col="black",line=2.5)
grid()
axis(1,at=c(1:3),labels=c("x","y","z")) # Ajoute l'axe des x en bas
vioplot(x,at=1,horizontal=F,col="orange",add=T)
vioplot(y,at=2,horizontal=F,add=T,col="yellow")
vioplot(z,at=3,horizontal=F,add=T,col="pink")
Ajouter des lettres de significativité
x = rnorm(100,20,7) # x, y, z , valeurs à remplacer par les vôtres
y = rnorm(100,25,11)
z = rnorm(100,22,8)
# Tracer
library(vioplot)
vioplot(x,y,z, col="pink",ylim=c(0,70))
# Ajouter les lettres
text(1:3, c(60,60,60),c("a","b","ab"))
Le stripchart (un complément utile pour visualiser ses points)
x <- rnorm(50)
stripchart(x, col="purple")
On peut ainsi combiner boxplot() ou vioplot() avec un stripchart() en jouant sur le paramètre jitter (l'agitation des points pour qu'ils soient étalés assez pour que l'on les voit tous).
x <- rnorm(50)
sx <- rep(c("F","M"),each=25)
boxplot(x~sx)
stripchart(x~sx, col = "#FF000088", pch = 16, vertical = TRUE,
add = T, method = "jitter", jitter = 1/(length(unique(sx)) + 2))
Faire la même chose sous {ggplot2}.
# Charger le package ggplot2
library(ggplot2)
# Préparer les données
x <- rnorm(50)
sx <- rep(c("F", "M"), each = 25)
data <- data.frame(value = x, sex = sx)
# Créer le graphique
ggplot(data, aes(x = sex, y = value)) +
geom_boxplot() +
geom_jitter(aes(color = sex), width = 0.2, alpha = 0.5)