library(sf)
library(mapsf)
library(tmap)Initiation à la cartographie
Cette page a pour but de vous initier à la cartographie avec R. Pour une formation plus complète, n’hésitez pas à consulter le manuel de T. Giraud et H. Pécout ici : Cartographie avec R.
1 Chargez les packages
Nous allons charger le package sf pour la manipulation des données spatiales, et les packages mapsf et tmap pour la cartographie.
2 Importez les fichiers
Téléchargez la table des communes du Calvados COM14.rds ici : lien, et déposez-la dans le data de votre projet.
data <- readRDS("data/COM14.Rds")Il s’agit d’une table au format sf, représentant les communes du Calvados. La table attributaire comprend les variables suivantes :
INSEE_COM: Code INSEE de la communeNOM: Nom de la communeTXLEPEN: Taux de vote en faveur de Le Pen au second tour des présidentielles de 2022DENSPOP: Densité de population en 2022TXCHOM: Taux de chômage en 2022
Téléchargez ensuite les terrains de tennis dans le département ici : lien
tennis <- read_sf("data/TENNIS.gpkg") %>% st_centroid()Warning: st_centroid assumes attributes are constant over geometries
3 Quelques éléments de base
3.1 Le format sf
La manipulation des données spatiales dans R s’est nettement simplifiée depuis l’apparition du package sf en 2016. Les données spatiales sont de simples data.frame stockant la géométrie des objets (points, lignes ou polygones) dans une colonne dédiée *geometry* (de classe sfc pour simple feature column). Cette colonne stocke les coordonnées géographiques des points ou des noeuds, ce qui permet de cartographier les objets.
Source : Géomatique avec R
3.2 La sémiologie graphique
Il existe des règles de sémiologie graphique qu’il convient de respecter dans chacune de vos cartes. La manière de représenter l’information sur une carte dépend de la nature de la variable à cartographier. Ce schéma résume l’essentiel :
Source : Cartographie avec R
Par exemple :
- La variable
Populationdes communes : sa moyenne a un sens, de même que sa somme. Il faut donc la représenter avec des symboles proportionnels - La variable
Taux de chômagedes communes : sa moyenne a un sens, mais pas sa somme. Il faut la représenter avec une carte choroplèthe (aplats de couleurs dans une gamme progressive) - La variable
Type de communes: sa moyenne n’a pas de sens. Il faut la représenter avec des symboles de forme différente - Comment représenter la densité de population ?
Par ailleurs, une carte doit toujours comprendre les quatre éléments suivants (TOLE) :
- Titre
- Orientation
- Légende
- Echelle
4 Les packages mapsf et tmap
Il existe plusieurs packages dédiés à la cartographie, dont mapsf et tmap qui sont probablement les plus complets. Les syntaxes sont néanmoins différentes, et chacun a des points forts et des points faibles. Il est donc intéressant de savoir utiliser les deux.
4.1 mapsf 
Ce package (vignettes ici) est basé sur la fonction centrale mf_map(), dont les arguments sont :
x: un objetsfvar: le nom de la variable à représentertype: le type de représentation
Ainsi, pour afficher les communes du Calvados :
mf_map(x = data, border = "grey20")Si on veut ajouter un autre objet spatial sur la carte, il faut répéter la fonction mf_map en ajoutant l’argument add = TRUE. On peut aussi facilement ajouter un titre avec mf_title :
mf_map(x = data, border = "grey20")
mf_map(x = tennis, pch = 20, cex = .5, col = "red", add= TRUE)
mf_title("Commune du Calvados")On peut également ajouter une ombre à la carte pour faire joli, et penser à la mise en page en rajoutant l’échelle et l’orientation :
mf_shadow(x = data)
mf_map(x = data, border = "grey20", add = TRUE)
mf_title("Terrains de tennis dans le Calvados")
mf_map(x = tennis, pch = 20, cex = .5, col = "red", add= TRUE)
mf_scale(size = 20, lwd = 2, cex = 1)
mf_arrow()4.2 tmap 
Le package tmap fonctionne en double mode plot (carte statique classique) et view (carte interactive), ce qui est très pratique. Il faut donc commencer par fixer ce mode, qui est plot par défaut. Vous trouverez les vignettes du package ici.
tmap_mode("plot")La syntaxe de tmap est additive, comme dans ggplot2. La logique est la suivante :
- Identification de l’objet spatial à cartographier avec la fonction
tm_shape()(i.e. l’objetsfétudié) - Identification de la nature de l’objet à cartographier (points, lignes, polygones) avec les fonctions (par exemple)
tm_dots(),tm_lines()outm_polygons().
Pour représenter les communes du Calvados, on procède donc ainsi :
tm_shape(data) + tm_polygons()Si on veut ajouter les terrains de tennis, il faut rajouter une phrase comprenant la paire de fonctions :
tm_shape(data) + tm_polygons() +
tm_shape(tennis) + tm_dots(fill = "red")Maintenant, la même chose en mode interactif :
tmap_mode("view")
tm_shape(data) + tm_polygons() +
tm_shape(tennis) + tm_dots(fill = "red")