Un graphique de densité est une alternative à l’histogramme, utilisé pour visualiser la distribution d’une variable continue.
Les pics d’un graphe de densité aident à identifier où les valeurs sont concentrées sur l’intervalle de la variable continue.
Par rapport aux histogrammes, les diagrammes de densité sont plus aptes à trouver la forme de la distribution parce qu’ils ne sont pas affectés par le nombre de barres utilisées (chaque barre utilisée dans un histogramme typique).
Par exemple, un histogramme avec seulement 4 barres ne produirait pas une forme de distribution suffisamment distincte de celle d’un histogramme de 30 barres. Cependant, avec les diagrammes de densité, ce n’est pas un problème.
Cet article décrit comment créer des courbes de densité à l’aide du package ggplot2 dans R.
Sommaire:
Livre Apparenté
GGPLOT2 - L’Essentiel pour une Visualisation Magnifique des Données dans RFonctions R clés
- Fonction clé :
geom_density()
(pour les courbes de densité). - Arguments clés pour personnaliser les graphiques:
color, size, linetype
: changer la couleur, la taille et le type de ligne, respectivementfill
: changer la couleur de remplissage (pour les bar plots, les histogrammes et les diagrammes de densité)alpha
: créer une couleur semi-transparente.
Préparation des données
Créer des données (wdata
) contenant les poids par sexe (M pour homme ; F pour femme):
set.seed(1234)
wdata = data.frame(
sex = factor(rep(c("F", "M"), each=200)),
weight = c(rnorm(200, 55), rnorm(200, 58))
)
head(wdata, 4)
## sex weight
## 1 F 53.8
## 2 F 55.3
## 3 F 56.1
## 4 F 52.7
Calculez le poids moyen par sexe en utilisant le package dplyr
. Les données sont d’abord regroupées par sexe, puis résumées en calculant le poids moyen par groupe. L’opérateur %>%
est utilisé pour combiner plusieurs opérations:
library("dplyr")
mu <- wdata %>%
group_by(sex) %>%
summarise(grp.mean = mean(weight))
mu
## # A tibble: 2 x 2
## sex grp.mean
## <fct> <dbl>
## 1 F 54.9
## 2 M 58.1
Chargement des packages R requis
Chargez le package ggplot2 et mettez le thème par défaut à theme_classic()
avec la légende en haut du graphique:
library(ggplot2)
theme_set(
theme_classic() +
theme(legend.position = "top")
)
Diagramme de densité basique
Nous commençons par créer un graphique, appelé a
, que nous terminerons dans la section suivante en ajoutant une couche via la fonction geom_density()
.
a <- ggplot(wdata, aes(x = weight))
Le code R suivant crée des courbes de densité de base avec une ligne verticale correspondant à la valeur moyenne de la variable weight (geom_vline()
):
# Diagramme de densité basique
# Echelle de l'axe y = stat(density) (comportement par défaut)
a + geom_density() +
geom_vline(aes(xintercept = mean(weight)), linetype = "dashed")
# Changer l'axe des y à `count` au lieu de `density`
a + geom_density(aes(y = stat(count)), fill = "lightgray") +
geom_vline(aes(xintercept = mean(weight)), linetype = "dashed")
Changer la couleur par groupe
Le code R suivant modifiera la couleur des traits et de remplissage par groupes du diagramme de densité. Les fonctions scale_color_manual()
et scale_fill_manual()
sont utilisées pour spécifier des couleurs personnalisées pour chaque groupe.
Nous allons procéder comme suit:
- Changer les couleurs de remplissage et la couleur des lignes par groupe (sexe)
- Ajoutez des lignes verticales des moyennes à l’aide de
geom_vline()
. Données :mu
, qui contient les valeurs moyennes des poids (weights) par sexe (calculées dans la section précédente). - Modifier la couleur manuellement:
- utiliser
scale_color_manual()
ouscale_colour_manual()
pour changer la couleur des traits - utiliser
scale_fill_manual()
pour changer les couleurs de remplissage.
- utiliser
# Changer la couleur des lignes par sexe
a + geom_density(aes(color = sex)) +
scale_color_manual(values = c("#868686FF", "#EFC000FF"))
# Changer la couleur de remplissage par sexe et ajouter la ligne moyenne
# Utiliser un remplissage semi-transparent : alpha = 0.4
a + geom_density(aes(fill = sex), alpha = 0.4) +
geom_vline(aes(xintercept = grp.mean, color = sex), data = mu, linetype = "dashed") +
scale_color_manual(values = c("#868686FF", "#EFC000FF"))+
scale_fill_manual(values = c("#868686FF", "#EFC000FF"))
Version: English
No Comments