5 Diagramme: Histogrammes
5.1 Avant-propos
Cette section présente comment construire un histogramme (histogram en anglais).
5.2 tl;dr
Donnes-moi un véritable exemple !
Voici une application d’histogrammes qui montre comment les becs des pinsons des Galápagos ont changé enfonction de facteurs externes :
Et voici le code :
library(Sleuth3) # data
library(ggplot2) # plotting
# load data
finches <- Sleuth3::case0201
# finch histograms by year with overlayed density curves
ggplot(finches, aes(x = Depth, y = ..density..)) +
# plotting
geom_histogram(bins = 20, colour = "#80593D", fill = "#9FC29F", boundary = 0) +
geom_density(color = "#3D6480") +
facet_wrap(~Year) +
# formatting
ggtitle("Severe Drought Led to Finches with Bigger Chompers",
subtitle = "Beak Depth Density of Galapagos Finches by Year") +
labs(x = "Beak Depth (mm)", caption = "Source: Sleuth3::case0201") +
theme(plot.title = element_text(face = "bold")) +
theme(plot.subtitle = element_text(face = "bold", color = "grey35")) +
theme(plot.caption = element_text(color = "grey68"))
Pour plus d’information sur le jeu de donnée, tapez ?Sleuth3::case0201
dans la console.
5.3 Simple examples
Whoa whoa whoa! Plus simple s’il vous plait!
Utilisons un jeu de données très simple :
5.3.1 Histogramme de base en R
L’avantage des histogrammes de base en R est qu’ils sont faciles à réaliser. En vérité, tout ce dont vous avez besoin pour afficher la donnée x
est d’utiliser hist(x)
. Mais nous y ajoutons un petit peu de couleur pour le rendre plus présentable..
La documentation complete de hist()
peut être trouver ici
5.3.2 Histogramme avec ggplot2
# import ggplot
library(ggplot2)
# must store data as dataframe
df <- data.frame(x)
# plot data
ggplot(df, aes(x)) +
geom_histogram(color = "grey", fill = "lightBlue",
binwidth = 5, center = 52.5) +
ggtitle("ggplot2 histogram of x")
La version ggplot des histogramme est un peu plus compliquée en apparence, mais elle vous donnera plus de contrôle sur le résultat. Note : Comme montré ci-dessus, ggplot requière un dataframe en entrée. Donc si vous rencontrez une erreur du type “R doesn’t know what to do” comme ça :
vérifiez que vous utilisez des dataframes.
5.4 Théorie
De façon générale, un histogramme est une des nombreuses façon de représenter des données continues.
Un histogramme est claire et facile à faire. Les histogrammes sont relativement manifestes : ils présentent la distribution empirique de vos données dans un jeu d’intervalles donné. Les histogrammes peuvent être employés sur des données brutes pour avoir une idée de leur distribution sans réaliser de manipulations compliquées. Nous recommendons les histogrammes pour avoir un sens basique et pratique de la distribution de vos données avec le minimum de traitement.
- Pour plus d’info sur les histogrammes et les variables continues, regardez Chapter 3 du livre.
5.5 Types d’histogrammes
Utilisez un histogramme pour représenter la distribution d’une variable continue. L’axe des y peut représenter une grande variété de résultats :
5.5.1 Frequence ou compte
y = nombre de valeur dans chaque bâton.
5.5.2 Frequence relative
y = nombre de valeur dans chaque bâton / nombre total de valeur
5.5.3 Frequence cumulée
y = nombre total de valeur plus petite que la bordure droite du bâton.
5.5.4 Densité
y = frequence relative / largeur des bâtons
5.6 Paramètres
5.6.1 Limite droite et gauches des bâtons
Soyez vigilent avec les limites car un point peut tomber dans le bâton de droite ou de gauche en fonction de la configuration des limites que vous avez choisis.
5.6.2 Nombre de bâtons
Le nombre de bâtons par défaut dans ggplot2 est 30 mais ce n’est pas toujours le choix idéal. Par conséquent pensez à le modifier si le résultat vous parait étrange. Vous pouvez le faire en utilisant binwidth
et préciser la largeur de bande que vous souhaitez, ou bien vous pouvez donner directement le nombre de bâton souhaiter en utilisant bins
.
# default...note the pop-up about default bin number
ggplot(finches, aes(x = Depth)) +
geom_histogram() +
ggtitle("Default with pop-up about bin number")
## `stat_bin()` using `bins = 30`. Pick better value with `binwidth`.
Voici quelques exemples en utilisant les deux méthodes décrites plus haut :
# using binwidth
p1 <- ggplot(finches, aes(x = Depth)) +
geom_histogram(binwidth = 0.5, boundary = 6) +
ggtitle("Changed binwidth value")
# using bins
p2 <- ggplot(finches, aes(x = Depth)) +
geom_histogram(bins = 48, boundary = 6) +
ggtitle("Changed bins value")
# format plot layout
library(gridExtra)
grid.arrange(p1, p2, ncol = 2)
5.6.3 Alignement des bâtones
Vérifiez que vos axes reflètent les vraies limites de votre histogramme. Vous pouvez utiliser boundary
pour préciser le point final de n’importe quel bâton. Vous pouvez également utiliser center
pour préciser le centre d’un bâton. ggplot2
est en mesure de calculer où placer tous les autres bâtons (aussi, remarquez que lorsque la limite a été changée, le nombre de bâton a diminué de 1. Cela est dû au fait que par défaut les bâtons sont centrés vont au-dessus/dessous de l’intervalle des données.)
df <- data.frame(x)
# default alignment
ggplot(df, aes(x)) +
geom_histogram(binwidth = 5,
fill = "lightBlue", col = "black") +
ggtitle("Default Bin Alignment")
# specify alignment with boundary
p3 <- ggplot(df, aes(x)) +
geom_histogram(binwidth = 5, boundary = 60,
fill = "lightBlue", col = "black") +
ggtitle("Bin Alignment Using boundary")
# specify alignment with center
p4 <- ggplot(df, aes(x)) +
geom_histogram(binwidth = 5, center = 67.5,
fill = "lightBlue", col = "black") +
ggtitle("Bin Alignment Using center")
# format layout
library(gridExtra)
grid.arrange(p3, p4, ncol = 2)
Note : Ne pas utiliser à la fois boundary
et center
pour l’alignement. Choisissez-en un seul.
5.7 Histogramme interactif avec ggvis
Le package ggvis
est toujours en cours de développement, mais certaines choises marchent déjà très bien tels que l’ajustement interactive de certains paramètre en codant.
Comme les images ne peuvent pas être partager en utilisant knit (comme pour les autres package comme plotly
), nous présentons ici que le code et pas le résultat. Pour essayer copier-collez le code suivant dans une session R..
5.7.1 Changer la largeur de bande de façon interactive
5.7.2 GDP
5.7.3 Changer le centre de façon interactive
5.7.4 Changer le centre (avec affichage des valeurs)
df <- data.frame(x = c(50, 51, 53, 55, 56, 60, 65, 65, 68),
y = c(.5, .5, .5, .5, .5, .5, .5, 1.5, .5))
df %>% ggvis(~x, ~y) %>%
layer_histograms(fill := "lightcyan", width = 5,
center = input_slider(45, 55, value = 45,
step = 1, label = "center")) %>%
layer_points(fill := "blue", size := 200) %>%
add_axis("x", properties = axis_props(labels = list(fontSize = 20))) %>%
scale_numeric("x", domain = c(46, 72)) %>%
add_axis("y", values = 0:3,
properties = axis_props(labels = list(fontSize = 20)))
5.7.5 Changer les limites droites et gauches de façon interactive
5.8 Ressources externes
- hist documentation: Documentation sur les histogramme en base R.
- ggplot2 cheatsheet: Toujours bon d’y jeter un oeil.
with