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).

x <- c(1:10) 

boxplot(x)

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.

boxplot(x,horizontal=T) 

boxplot(x, main="titre") 

boxplot(x, xlab="titre de l'axe (unités)") 

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 

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 

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"))

# autres couleurs 

# cf. exemple ci-dessus 

# 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.

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")) 

vioplot(x,horizontal=T)

main : titre principal (en haut)sub : sous-titre (en bas)xlab et ylab (titres des axes)Remarque : les titres doivent s'ajouter avec la fonction title lorsque le diagramme est tracé

vioplot(x)

title(ylab = "axe y", main="Titre 1",sub="sous-titre") 

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 

a = c(1,2,3,4,5,4,3,2,1,4,3)

vioplot(a, col="orange")

# autres couleurs 


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")


Aide à l'utilisation de R - Diagramme en violon violinplot avec positions et couleurs  variables

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)