Objectif

Quelle est la meilleure façon de créer une carte en R ? Il existe une multitude de bibliothèques pour la création de cartes. Ici, je vais vous montrer ma préférée.

Présentation

Voici un aperçu rapide d’une création de carte avec maps et ggplot2 en utilisant les données de populations de l’INSEE.

map_data('france') %>%
  left_join(read.csv('population.csv', header = TRUE, sep = ';'), by = c('region' = 'departement')) %>%
  ggplot(aes(x = long, y = lat, group = group, fill = population)) +
  geom_polygon(color = '#555555', linewidth = .5) +
  coord_map() +
  scale_fill_gradient(low = "white", high = '#00a67d', name = 'Population')+
  theme_void()

Expplications

Charger la “France”

Commençons par charger la France, c’est à dire récupérer la liste des départements et leur coordonnées. Pour cela nous aurons besoin de maps.

library(maps)

france = map_data('france')
head(france)
long lat group order region subregion
2.557093 51.09752 1 1 Nord NA
2.579995 51.00298 1 2 Nord NA
2.609101 50.98545 1 3 Nord NA
2.630782 50.95073 1 4 Nord NA
2.625894 50.94116 1 5 Nord NA
2.597699 50.91967 1 6 Nord NA
lignes = length(france$region)

On obtient une table de 13353 lignes.

Remarque : la colonne region fais référance au départements.

Ajoutons nos données

Ajoutons les données à analyser, ici la population. Pour effectuer la jointure nous utilisons dplyr.

library(dplyr)

population = read.csv('population.csv', header = TRUE, sep = ';')

data = left_join(france, population, by = c('region' = 'departement'))
head(data)
long lat group order region subregion population
2.557093 51.09752 1 1 Nord NA 2607746
2.579995 51.00298 1 2 Nord NA 2607746
2.609101 50.98545 1 3 Nord NA 2607746
2.630782 50.95073 1 4 Nord NA 2607746
2.625894 50.94116 1 5 Nord NA 2607746
2.597699 50.91967 1 6 Nord NA 2607746

Graphiques

On peut alors commencer à afficher nos données avec ggplot.

library(ggplot2)

p = ggplot(data, aes(x = long, y = lat, group = group, fill = population)) +
  geom_polygon()
p

Ce visuel nous permet de comprendre comment est dessiné la carte, mais plusieurs paramètres peuvent se régler. La carte semble “étiré”, ajustons cela.

p = p + coord_map()
p

Supprimer le quadrillage en arrière plan.

p = p + theme_void()
p

Et voilà, la carte est correctement affichée. On peux personnaliser la map en :

  • ajoutant des démarcations entre les régions avec linewidth et color
  • ajoutant des titre et sous-titre
  • modifiant la légende
  • modifiant les couleurs de dégradé

Interactivité

Pour aller plus loins, nous allons voir comment créer une carte interactive avec ggiraph.

library(ggiraph)

# Ajoutons le texte de l'info bulle dans le jeux de données
data = map_data('france') %>%
  left_join(read.csv('population.csv', header = TRUE, sep = ';'), by = c('region' = 'departement')) %>%
  mutate(label = paste(region, '\n', format(population, big.mark = " "), 'habitants'))
  
p = ggplot(data, aes(x = long, y = lat, group = group, fill = population)) +
  geom_polygon_interactive(
    colour = "#555555", size = .1, data_id = data$label, tooltip = data$label
  ) +
  scale_fill_gradient(low = "white", high = '#00a67d', name = 'Population')+
  coord_map() + theme_void()

girafe(code = print(p), options = list(opts_hover(css = 'fill:#00a070; cursor:pointer;')))