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.
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()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.
| 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 |
On obtient une table de 13353 lignes.
Remarque : la colonne region fais référance au départements.
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 |
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()
pCe visuel nous permet de comprendre comment est dessiné la carte, mais plusieurs paramètres peuvent se régler. La carte semble “étiré”, ajustons cela.
Supprimer le quadrillage en arrière plan.
Et voilà, la carte est correctement affichée. On peux personnaliser la map en :
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;')))