library(dplyr)
library(sf)
library(stringr)
library(archive)
library(ggplot2)
library(glue)
library(ggtext)
library(scales)
library(units)
library(leaflet)
library(cartiflette)
Produire des cartes avec
Dérouler les slides ci-dessous ou cliquer ici pour afficher les slides en plein écran.
Dans ce TP, nous allons apprendre à créer des cartes avec . A mesure que devient incontournable auprès des personnes manipulant des données spatiales, les solutions pour produire des cartes de qualité deviennent de plus en plus nombreuses. a de moins en moins à envier aux logiciels spécialisés comme QGIS.
Si vous êtes intéressés par Python
, une version très proche de ce TP est disponible dans mon cours de l’ENSAE.
Produire de belles cartes demande du temps mais aussi du bon sens. Comme toute représentation graphique, il est important de réfléchir au message à faire passer et aux moyens appropriés. La sémiologie cartographique, une discipline scientifique qui s’intéresse aux messages transmis par les cartes, propose certaines règles pour éviter de transmettre des messages faussés, volontairement ou involontairement.
Certaines peuvent être retrouvées à travers des conseils pratiques dans ce guide de sémiologie cartographique de l’Insee. Celles-ci sont reprises dans ce guide.
Cette présentation de Nicolas Lambert présente, à partir de nombreux exemples, quelques principes de la dataviz cartographique.
Ce TP vise à initier:
- A l’utilisation de
ggplot
pour la cartographie ; - Au package
mapsf
, conçu par les géographiques du RIATE (Paris 7), le package de référence pour réaliser des cartes avec - Au package
leaflet
qui est un point d’accès vers la librairieJavaScript
leaflet
permettant de produire des cartes interactives. Nous approfondirons ultérieurement les cartes réactives avec un chapitre d’ouverture versObservable
.
Dans ce chapitre, nous allons utiliser les packages suivants:
1 Données
Au cours de ce chapitre, nous allons utiliser plusieurs jeux de données pour illustrer différents types de cartes:
- Des comptages de population ;
- Les limites départementales de la France métropolitaine ;
- Les limites communales du Finistère ;
- Le couvert forestier du département des Landes ;
2 Import des données
Ce TD va proposer un certain nombre de jeux de données intéressants pour la cartographie. Comme l’import de ceux-ci n’est pas le coeur du chapitre, nous proposons directement le code d’import des données.
2.1 Populations légales au niveau départemental
library(readr)
library(dplyr)
# download et unzip pour avoir les fichiers
= "https://www.insee.fr/fr/statistiques/fichier/6683035/ensemble.zip"
url_pop_legales download.file(url_pop_legales, "pop_legales.zip")
unzip("pop_legales.zip")
= read_csv2("donnees_departements.csv")
pop_legales_departements = read_csv2("donnees_communes.csv") %>%
pop_legales_finistere filter(CODDEP == "29") %>%
mutate(code_insee = paste0(CODDEP, CODCOM))
2.2 Limites communales et départementales
Nous allons utiliser cartiflette
qui facilite la récupération des fonds de carte administratifs de l’IGN.
::install_github("linogaliana/cartiflette-r") remotes
En premier lieu, nous allons récupérer les limites des départements:
library(cartiflette)
<- download_vectorfile_url_all(
departement_borders crs = 4326,
values = "metropole",
borders="DEPARTEMENT",
vectorfile_format="geojson",
filter_by="FRANCE_ENTIERE",
source="EXPRESS-COG-CARTO-TERRITOIRE",
year=2022)
Pour s’en assurer, une carte peut rapidement être produite:
ggplot(departement_borders) +
geom_sf(fill = "transparent") +
theme_void()
On va également récupérer les limites des communes du Finistère avec cartiflette
. Voici le code pour ne garder que les communes du Finistère (département 29):
<- download_vectorfile_url_all(
finistere crs = 4326,
values = "29",
borders="COMMUNE",
vectorfile_format="geojson",
filter_by="DEPARTEMENT",
source="EXPRESS-COG-CARTO-TERRITOIRE",
year=2022)
<- finistere %>% left_join(pop_legales_finistere, by = c("INSEE_COM" = "code_insee") ) finistere
On va d’abord faire une carte simple, avec ggplot
, des limites communales
- En s’inspirant du code précédent, faire la carte du Finistère
Pour en apprendre un peu plus sur les données, on va mettre en oeuvre une carte avec le package leaflet
. Celui-ci permettra de créer des visualisations réactives, plus propices à l’exploration de données.
- Représenter les limites communales du Finistère avec le package leaflet en utilisant les fonctions suivantes:
- Afficher un fonds de carte Open Street Map avec la fonction
addTiles
- Afficher les limites des polygones avec la fonction
addPolylines
- Afficher un fonds de carte Open Street Map avec la fonction
- Travailler un peu la couche
Polylines
en réduisant la taille des bordures et en utilisant le paramètrepopup
pour afficher le nom de la ville et la population communales
Carte obtenue à la question 1
Solution question 1
ggplot(finistere) +
geom_sf(fill = "transparent") +
theme_void()
Carte obtenue à la question 2
Solution question 2
leaflet(finistere) %>%
addTiles() %>%
addPolylines()