Une heatmap avec R et ggplot2

1 minute(s) read

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()

Colin par département

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()

Elisabeth prénom

Simple, n’est-ce pas !

What do you think?