R : histogrammes et hachures
Les histogrammes ne sont pas toujours simples à réaliser, surtout lorsque les amplitudes de classes ne sont pas toutes identiques. Heureusement, une solution simple existe : R.
Syntaxe et principaux arguments
C’est par la fonction hist() que R, plus précisément son package chargé par défaut graphics, vous permettra de réaliser des histogrammes. Sa syntaxe de base est :
hist(x, breaks = "…", col = "la couleur", main = "le titre", xlab = "Valeurs", ylab = "Fréquence"...)
Ses principaux arguments sont les suivants.
- x : vecteur numérique contenant les données.
- breaks : définit le nombre de classes (ou intervalles). Plusieurs options sont possibles :
- Un nombre fixe de classes (exemple : breaks = 10).
- Un vecteur de valeurs définissant les bornes des classes (exemple : breaks = c(0, 5, 10, 20, 50)).
- Une méthode automatique, par défaut celle de Sturges, basée sur \(1 + \log_2N\) (\(N\) étant la taille de la population).
- col : couleur des barres (argument développé en page de graphiques avec R).
- main : titre du graphique (idem).
- border : couleur des contours des barres.
- xlab, ylab : étiquettes des axes X et Y.
- freq : indique si l'on affiche les fréquences absolues (TRUE) ou la densité (FALSE).
- xlim, ylim : limites des axes.
- right : définit si les classes sont fermées à droite (TRUE par défaut).
Exemple
En un mois, un antiquaire a vendu cinquante articles dont les prix en euros sont les suivants :
Prix | 255 | 780 | 2 600 |
80 | 280 | 860 | 3 000 |
80 | 320 | 900 | 3 000 |
80 | 350 | 950 | 3 200 |
100 | 400 | 950 | 3 500 |
110 | 420 | 1 200 | 4 200 |
120 | 450 | 1 250 | 4 300 |
140 | 500 | 1 350 | 4 500 |
140 | 520 | 1 400 | 4 600 |
160 | 520 | 1 600 | 4 600 |
200 | 580 | 2 200 | 4 800 |
240 | 650 | 2 200 | 4 900 |
250 | 740 | 2 200 |
D’abord nous importons ces données depuis Excel avec R-Studio (précisons qu’elles apparaissent ici en quatre colonnes pour une simple raison de mise page ; en fait elles ne figurent que sur une seule).
antiquaire <- read_excel("antiquaire.xlsx", sheet = "Feuil1")
# Création des classes
classes <- c(0, 500, 2000, 5000)
# Histogramme
hist(antiquaire$Prix, breaks = classes, col = "grey", border = "darkblue", main = "Nombre d'articles vendus par tranche de prix", yaxt = "n", xlab = "", ylab = "")
Explications. Avec $Prix nous signifions que l’intitulé « Prix » de la liste ne doit pas être pris en compte puisque son format est alphabétique. col = "gray" signifie que les aires doivent être de couleur grise et border = "darkblue" que leurs bordures doivent être bleu foncé. Comme l’axe des ordonnées est trop délicat à interpréter nous le supprimons avec yaxt = "n". Nous refusons les noms d'axes que R aurait ajoutés par défaut avec xlab = "", ylab = "".
Personnalisons l’axe des abscisses de la façon suivante :
hist(antiquaire$Prix, breaks = classes, col = "gray", border = "darkblue", main = "Nombre d'articles vendus par tranche de prix", xlab = "", ylab = "", axes = FALSE)
axis(1, at = classes, labels = paste(classes, "€"))
Dans la première ligne du script nous avons supprimé les deux axes puis réintroduit celui des abscisses avec la personnalisation souhaitée dans une seconde ligne.
Hachures
Cet exemple de construction d’histogramme nous donne l’occasion d’introduire les hachures avec R.
Les arguments sont les suivants :
- density : définit la densité des lignes hachurées (nombre de lignes par pouce). Si density = NULL (par défaut), les barres sont pleines.
- angle : définit l’angle des hachures (en degrés).
Modifions la ligne de script.
hist(antiquaire$Prix, breaks = classes, col = "red", border = "darkblue", density = c(10, 20, 50), angle = c(45, 0, -45), main = "Nombre d'articles vendus par tranche de prix", xlab = "", ylab = "", axes = FALSE)
Vous remarquez l’utilisation de vecteurs qui permettent un espacement et une inclinaison différents pour chaque aire.
Note : en page de mode et histogramme, nous avons reproduit le graphique obtenu avec le script suivant :
hist(antiquaire$Prix, breaks = classes, col = "red", border = "darkblue", density = 15, angle = c(45, -45, 45), main = "Nombre d'articles vendus par tranche de prix", xlab = "", ylab = "", axes = FALSE)
axis(1, at = classes, labels = paste(classes, "€"))
Attention, les hachures ne sont pas compatibles avec les diagrammes circulaires (du moins dans la version R de base).