Vous êtes ici : Accueil > Salle du prof > Il est libre Math > Un R de boîte à moustaches à la française
Par : mathazay
Publié : 28 avril 2006

Un R de boîte à moustaches à la française

La définition des boîtes à moustaches pédagogiques n’est pas standard... Voici comment les obtenir avec R . Deux versions : à partir d’une série, à partir des quantiles. Avec ou sans grille, verticale ou horizontale, en nuances de gris ou en noir et blanc.

# une série x
> x
[1]  1  2  6  6  7  8  8 10 10 10 10 10 12 12 13 14 14 18 19 19 20 20
# si x n'est pas triée en ordre croissant
> x<-sort(x)
# récupération de la structure de la boîte dans xb
> xb<-boxplot(x,outliers=T,plot=F)
# définition des moustaches, quartiles et extrêmes "à la française"
> d1<-as.numeric(quantile(x,0.1,type=1))
> d9<-as.numeric(quantile(x,0.9,type=1))
> q1<-as.numeric(quantile(x,0.25,type=1))
> q3<-as.numeric(quantile(x,0.75,type=1))
> extr<-unique(c(subset(x,x<d1),subset(x,x>d9)))
> nbextr<-rep(1,length(extr))
# construction de la boîte
> xb$stats[1,1]<-d1
> xb$stats[2,1]<-q1
> xb$stats[4,1]<-q3
> xb$stats[5,1]<-d9
> xb$out<-extr
> xb$group<-nbextr
# représentation graphique
> bxp(xb)


# variante : on définit une fonction
# ne pas taper les + qui sont les retours à la ligne
# en attendant la fin de la définition avec l'accolade
> fbam<-function(x) {x<-sort(x)
+ xb<-boxplot(x,outliers=T,plot=F)
+ d1<-as.numeric(quantile(x,0.1,type=1))
+ q1<-as.numeric(quantile(x,0.25,type=1))
+ q3<-as.numeric(quantile(x,0.75,type=1))
+ d9<-as.numeric(quantile(x,0.9,type=1))
+ extr<-unique(c(subset(x,x<d1),subset(x,x>d9)))
+ nbextr<-rep(1,length(extr))
+ xb$stats[1,1]<-d1
+ xb$stats[2,1]<-q1
+ xb$stats[4,1]<-q3
+ xb$stats[5,1]<-d9
+ xb$out<-extr
+ xb$group<-nbextr
+ return(xb)
+ }


# si la série est "serie"
# on affiche les paramètres de la boîte
> fbam(serie)
# et on affiche la représentation graphique
> bxp(fbam(serie))
# reste à convertir l'image en .eps ou .gif...

Bam "à la française"

et si l’on veut représenter à partir des données des quantiles :

# horizontal=TRUE... axes=FALSE, pas d'axes
> bxp(fbamquant(1,2,5,10,15,18,20),horizontal=T,axes=F,ylim=c(0,20))
# ajoût de la grille, lw : l'épaisseur, lty : le type
> abline(v=1:20,col="light gray",lw=1,lty=2)
> box()
> axis(1,0:20)
# boxfill : la couleur, je répète le dessin pour qu'il passe par dessus
> bxp(fbamquant(1,2,5,10,15,18,20),horizontal=T,axes=F,xlim=
(1,20),add=T,boxfill="gray")

Bam horizontale

la fonction fbamquant :

> fbamquant<-function(mini,d1,q1,med,q3,d9,maxi){
+ xbam<-boxplot(c(mini,d1,q1,med,q3,d9,maxi),plot=F)
+ xbam$stats[1,1]<-d1
+ xbam$stats[2,1]<-q1
+ xbam$stats[3,1]<-med
+ xbam$stats[4,1]<-q3
+ xbam$stats[5,1]<-d9
+ xbam$out<-c(mini,maxi)
+ xbam$group<-c(1,1)
+ return(xbam)
+ }

Pour récupérer les fonction fbam et fbamquant (fichier de type R) :

# dans R, taper en ligne de commande :
> load("sauveR")
# et normalement fbam et fbamquant sont disponibles

Documents joints

  • French BAM, Zip, 1020 octets

    le fichier à charger dans R, il contient les fonctions fbam et fbamquant