Chapitre 11 Créer des cartogrammes

Un cartogramme est une carte pour laquelle une variable continue, remplace la surface des territoires représentés. La géométrie de l’espace de la carte est déformée afin de se conformer aux informations relatives à cette variable.

Les fonctions du package cartogramm permettent de réaliser l’opération de déformation attendue. La sortie de ces fonctions est un spatial dataframe avec une nouvelle géométrie. On peut ensuite utiliser cette nouvelle géométrie pour la visualiser avec tout package de cartographie.

Dans ce chapitre nous allons utiliser les packages suivants.

library(cartogram)
library(tmap)
library(ggplot2)
#remotes::install_github("MaelTheuliere/variousdata")
library(variousdata)
data("World")

11.1 Cartogramme d’aire contigue

Définition de la couche à partir de la variable d’une table. Ici en l’occurence le taux de mortalité de la mère à la naissance.

La fonction cartogram_cont() permet de définir la déformation attendue.

mmr_cont <- cartogram_cont(sdg_indicators_sf %>% 
                 filter(timeperiod == "2015"),
               "sh_sta_mmr")

On peut ensuite utiliser le package que l’on souhaite pour cartographier cette couche.

  • avec tmap
mmr_cont %>% 
  tm_shape()+
  tm_polygons("sh_sta_mmr",palette=viridis(5, alpha = 1, begin = 0.3, end = 1, direction = 1, option = "D"),
              title="Taux de mortalité de la mère \n(pour 100 000 naissances)")+
  tm_layout(main.title="Taux de mortalité de la mère \n(pour 100 000 naissances) dans le monde",
            main.title.size=1.2,
            bg.color = "skyblue",
            legend.position=c("left","bottom"),
            legend.outside = F,
            main.title.position = "center",
            frame = FALSE)

  • avec ggplot2
mmr_cont %>% 
  ggplot() +
  geom_sf(aes(fill = log(sh_sta_mmr)),color="white",size=.2)+
  scale_fill_viridis_c(
    option = "magma",
    direction = 1,
    breaks = c(0, 1, 2, 3, 4, 5, 6, 7))+
  guides(
    colour = F,
    order = 0,
    fill = guide_legend(
      direction = "horizontal",
      keyheight = unit(2, units = "mm"),
      keywidth = unit(20, units = "mm"),
      order = 1,
      title.position = "top",
      title.hjust = 0.5,
      nrow = 1,
      label.position = "bottom",
      label.hjust = 1
    )
  ) +
  theme_minimal()+
  theme(legend.position = "bottom",
        panel.background = element_rect(fill = "light blue"))+
  labs(fill = "Taux de mortalité infantile (échelle logarithmique)")

11.2 Cartogramme d’aire non contigue

La fonction cartogram_ncont() permet de définir la déformation attendue.

On va ici réaliser le cartogramme sur le log de la mortalité des mères à la naissance.

mmr_ncont <- cartogram_ncont(sdg_indicators_sf %>% 
                               filter(timeperiod == "2015",continent == "Africa") %>% 
                               mutate(log_sh_sta_mmr = log(sh_sta_mmr)),
                             "log_sh_sta_mmr")
tm_shape(World)+
  tm_polygons()+
  tm_shape(mmr_ncont, is.master = T)+
  tm_polygons("log_sh_sta_mmr",palette=viridis(5, alpha = 1, begin = 0.3, end = 1, direction = 1, option = "D"),
              title="Taux de mortalité de la mère \n(pour 100 000 naissances) en Afrique \néchelle logarithmique")+
  tm_layout(main.title="Taux de mortalité de la mère \n en Afrique",
            main.title.size=1,
            bg.color = "skyblue",
            legend.position=c("left","bottom"),
            legend.outside = T,
            main.title.position = "center",
            frame = F)

11.3 Cartogramme de Dorling

Le cartogramme de Dorling est une représentation spatiale qui vise à remplaer les polygones par des cercles proportionnels à une variable données respectant au maximum la position spatiale des polygones.

La fonction cartogram_dorling() permet de définir la géométrie attendue.

On va ici réaliser un cartogramme de dorling sur le PIB par habitant en 2015.

gdp_dorling <- cartogram_dorling(sdg_indicators_sf %>% 
                                   filter(timeperiod == "2015",!is.na(gdp_per_cap)),"gdp_per_cap")
tm_shape(World) + 
  tm_borders() +
  tm_shape(gdp_dorling) + 
  tm_polygons("continent") +
  tm_layout(frame = FALSE) +
  tm_layout(main.title="PIB par habitant dans le monde",
            main.title.size=1,
            bg.color = "skyblue",
            legend.position=c("left","bottom"),
            legend.outside = F,
            main.title.position = "center",
            frame = T)