Une heatmap avec R et ggplot2
Un court tutorial sur les heatmaps avec R, inspirés d’articles sur databzh.
L’idée de cet article prend racine dans deux billets sur Data Bzh :
Dans ce court post, retrouvez le déroulement de la création d’une heatmap d’un prénom par année et par département. Le jeu de données est disponible sur data.gouv. Il a été téléchargé et unzippé en dehors de R.
Loading
library(tidyverse)
## Loading tidyverse: ggplot2
## Loading tidyverse: tibble
## Loading tidyverse: tidyr
## Loading tidyverse: readr
## Loading tidyverse: purrr
## Loading tidyverse: dplyr
name <- read.table("/home/colin/Téléchargements/dpt2015.txt", stringsAsFactors = FALSE, sep = "\t", encoding = "latin1", header = TRUE, col.names = c("sexe","prenom","annee","dpt","nombre")) %>%
na.omit()
name$annee <- as.Date(name$annee, "%Y")
Nous avons maintenant un jeu de données propre, avec les noms et les départements.
Heatmap
Une heatmap se crée le geom geom_tile
de ggplot2
. Voici sa construction étape par étape.
choix <- "COLIN"
name %>%
#Filtre par nom
filter(prenom == choix) %>%
#Groupe par année et département
group_by(annee, dpt) %>%
#Résumé de l'effectif par année et département
summarise(somme = sum(nombre)) %>%
#Suppression des NA
na.omit() %>%
#Initialisation de ggplot
ggplot(aes(annee, dpt, fill = somme)) +
#THE MAN OF THE HOUR
geom_tile() +
#Échelle
scale_x_date(limits = c(lubridate::ymd("1900-01-01"), lubridate::ymd("2015-01-01"))) +
#Et deux trois paillettes pour rendre le tout plus joli
xlab("Année") +
ylab("Département") +
labs(title = paste0("Apparition du prénom ", tolower(choix)," par département, 1900-2015")) +
theme_minimal()
Oui, c’est aussi simple que ça. Essayons avec un autre prénom.
(Bien sûr, vous pouvez choisir une autre échelle pour les couleurs.)
choix <- "ELISABETH"
name %>%
filter(prenom == choix) %>%
group_by(annee, dpt) %>%
summarise(somme = sum(nombre)) %>%
na.omit() %>%
ggplot(aes(annee, dpt, fill = somme)) +
geom_tile() +
scale_x_date(limits = c(lubridate::ymd("1900-01-01"), lubridate::ymd("2015-01-01"))) +
#Changer l'échelle de couleurs
scale_fill_gradient(low = "#E18C8C", high = "#973232") +
xlab("Année") +
ylab("Département") +
labs(title = paste0("Apparition du prénom ", tolower(choix)," par département, 1900-2015")) +
theme_minimal()
Simple, n’est-ce pas !
What do you think?