Les histogrammes avec R

Un fichier de données

Travaillons sur une enquête de satisfactions dans un hôpital, récupéré lors d’un cours de FUN (France Unité Numérique). Les fichiers sont disponibles ici.

Par la suite, ces données seront stockées dans la variable satis .

Dans ces données comme souvent, les observations sont en lignes et les variables en colonnes.

Les couleurs

Pour ne pas rester sur le gris par défaut, voici la liste des couleurs de R.

Bien comprendre les intervalles

Avant d’en venir aux histogrammes, pour bien comprendre les intervalles utilisés, on peut utiliser la commande cut qui va associer à chaque valeur un intervalle.

Pour les âges, voici quelques essais.

satis$age.cat <- cut(satis$age, breaks=seq(10,100,10))
table(satis$age.cat)


(10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
7 36 55 85 95 110 79 53 8

On remarque la forme par défaut de tous les intervalles (ouvert-fermé), même le premier.

On peut fermer le premier intervalle :

satis$age.cat <- cut(satis$age, breaks=seq(10,100,10),include.lowest=TRUE) 
table(satis$age.cat)


[10,20] (20,30] (30,40] (40,50] (50,60] (60,70] (70,80] (80,90] (90,100]
7 36 55 85 95 110 79 53 8

Pour changer le sens des intervalles (fermé-ouvert) :

satis$age.cat <-cut(satis$age,breaks=seq(10,100,10),include.lowest=TRUE,right=FALSE)
table(satis$age.cat)


[10,20) [20,30) [30,40) [40,50) [50,60) [60,70) [70,80) [80,90) [90,100]
5 31 50 86 91 113 84 57 11

Enfin, on peut donner la liste exhaustive des bornes des intervalles :

satis$age.cat <- cut(satis$age, breaks=c(10,40,50,60,70,80,100),include.lowest=TRUE,right=FALSE) 
table(satis$age.cat)


[10,40) [40,50) [50,60) [60,70) [70,80) [80,100]
86 86 91 113 84 68

Des histogrammes par défaut

Le plus simple :

hist(satis$age)

histo_age_01.png

En modifiant les intervalles et en le nommant histo :

histo<-hist(satis$age, breaks=c(10,40,50,60,70,80,100),include.lowest=TRUE,right=FALSE)

histo_age_02.png

On peut maintenant accéder aux limites de l’intervalles et aux effectifs par intervalle :

histo$breaks


[1] 10 40 50 60 70 80 100

histo$counts


[1] 86 86 91 113 84 68

En utilisant les options

hist(satis$age,col="brown",main="Répartition des âges",xlab="âges",ylab="Effectifs",las=1,xlim=c(10,100),ylim=c(0,120))

histo_age_03.png