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
sdg_indicators_2015_sf <- sdg_indicators_sf %>% 
  filter(timeperiod ==2015)
  • 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
bins <-quantile(sdg_indicators_2015_sf$sh_sta_mmr,
                na.rm=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.

pal <- colorBin("YlOrRd", domain = 
                  sdg_indicators_2015_sf$sh_sta_mmr,
                bins = bins)
  • 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
sdg_indicators_2015_sf_centroid <- sdg_indicators_sf_centroid %>% 
  filter(timeperiod ==2015)
  • 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
bins <-quantile(sdg_indicators_2015_sf_centroid$sh_sta_mmr,na.rm=T)
  • Création d’une palette de couleurs associée
pal <- colorBin("YlOrRd", domain = sdg_indicators_2015_sf_centroid$sh_sta_mmr, bins = bins)
  • 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

12.2 Exporter une sortie html

La foncion saveWidget() permet d’exporter une sortie d’un HTML Widget en fichier HTML.

saveWidget(widget=carte_rond_proportionnel,file="Taux de décès des mères à la naissance.html")