Chapitre 12 Créer des cartes pour le web
12.1 Les cartes Leaflet
leaflet
est une bibliothèque javascript de cartographie en ligne. R permet de produire des cartes en exploitant cette bibliothèque.
La limitation de leaflet
est qu’il ne permet de visualiser que des données en projection WGS84.
Dans ce chapitre, nous utiliserons les packages suivants
library(leaflet)
library(sf)
library(tidyverse)
#remotes::install_github("MaelTheuliere/variousdata")
library(variousdata)
12.1.1 Carte choroplète
Ci-dessous un exemple avancé de carte choroplète avec leaflet.
- Définition des données de départ
- Transformation de la projection car
leaflet
ne connait que le WGS 84
sdg_indicators_2015_sf<-st_transform(sdg_indicators_2015_sf,crs=("+proj=longlat +datum=WGS84 +no_defs"))
- Discrétisation de la variable d’intérêt
- Création d’une palette de couleurs associée
leaflet
intègre une fonction colorBin()
qui permet d’associer à un vecteur de valeurs numériques un vecteur de couleurs en fonction d’une palette et d’un vecteur de bornes.
- Création d’un label ad-hoc à afficher en surbrillance au passage de la souris sur la carte.
labels <- sprintf(
"<strong>%s</strong><br/>%g décès pour 100 000 naissance en 2015",
sdg_indicators_2015_sf$geoareaname, sdg_indicators_2015_sf$sh_sta_mmr
) %>% lapply(htmltools::HTML)
- Réalisation de la carte
La fonction addPolygons()
permet de créer la carte choroplète.
La fonction addProviderTiles()
permet de rajouter un fond cartographique parmis les couches fournies par leaflet
.
leaflet(sdg_indicators_2015_sf) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(data=sdg_indicators_2015_sf,
fillColor=~pal(sh_sta_mmr),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto"))
12.1.2 Carte à ronds proportionnels
Pour réaliser des ronds proportionnels, il va falloir comme pour ggplot2
partir des centroides de nos polygones.
- Création de la table en entrée
- Transformation de la projection car
leaflet
ne connait que le WGS 84
sdg_indicators_2015_sf_centroid <- st_transform(sdg_indicators_2015_sf_centroid,crs=("+proj=longlat +datum=WGS84 +no_defs"))
- Discrétisation de la variable d’intérêt
- Création d’une palette de couleurs associée
- Création d’un label ad-hoc à afficher en surbrillance au passage de la souris sur la carte.
labels <- sprintf(
"<strong>%s</strong><br/>%g décès pour 100 000 naissance en 2015",
sdg_indicators_2015_sf_centroid$geoareaname, sdg_indicators_2015_sf_centroid$sh_sta_mmr
) %>% lapply(htmltools::HTML)
- Création de la carte
carte_rond_proportionnel<-leaflet(sdg_indicators_2015_sf_centroid) %>%
addProviderTiles(providers$CartoDB.Positron) %>%
addPolygons(data=sdg_indicators_2015_sf,
fillColor = "#ffffff",
opacity=.2,
color = "white",
dashArray = "3",
fillOpacity = 0.7
) %>%
addCircles(data=sdg_indicators_2015_sf_centroid,
fillColor=~pal(sh_sta_mmr),
radius=~100000*log2(sh_sta_mmr),
weight = 2,
opacity = 1,
color = "white",
dashArray = "3",
fillOpacity = 0.7,
highlight = highlightOptions(
weight = 5,
color = "#666",
dashArray = "",
fillOpacity = 0.7,
bringToFront = TRUE),
label = labels,
labelOptions = labelOptions(
style = list("font-weight" = "normal", padding = "3px 8px"),
textsize = "15px",
direction = "auto")) %>%
addLegend("bottomright", pal = pal, values = ~sh_sta_mmr,
title = "Taux de décès des mères à la naissance",
opacity = 1)
carte_rond_proportionnel