Faire des cartogrammes avec R

Le package cartogram permet de construire des cartogrammes avec R. Trois types de déformations sont proposés  :

  • les cartogrammes continus (Dougenik et al. 1985) avec la fonction cartogram_cont(),
  • les cartogrammes discontinus (Olson 1976) avec la fonction cartogram_ncont(),
  • les cartogrammes en cercles (Dorling 1996) avec la fonction cartogram_dorling().

Le package peut être utilisé avec des objets sp ou sf.

Dans l’exemple suivant nous utilisons les données contenues dans le package sf (North Carolina SIDS data set). Le script utilisé pour générer ces cartes est disponible ici.

# get the path to the shapefile embedded in sf
# package
shapepath <- system.file("shape/nc.shp", 
                         package="sf")
# import the shapefile
nc <- sf::st_read(shapepath)
# change the projection of the map
nc <- sf::st_transform(nc, 3857)
# data preparation
# compute the sudden infant deaths per 1000 births
nc$share <- 100000 * nc$SID74 / nc$BIR74
# quantization breaks of the rate
bks <- getBreaks(v = nc$share, method = "quantile", nclass = 5)
# correct the breaks to use the global rate as limit of class 
global_rate <- sum(nc$SID74) * 100000 / sum(nc$BIR74)
bks[4] <- global_rate
# get a color palette
cols <- carto.pal(pal1 = "green.pal", n1 = 3, 
                  pal2 = "wine.pal", n2 = 2)
## Choropleth layer
# set figure margins and background color
par(mar = c(0,0,1.2,0), bg = "lemonchiffon")
# display the sudden infant deaths per 1000 births
choroLayer(x = nc,var = "share", breaks = bks, col = cols,
           border = "khaki", lwd = 0.5, 
           legend.title.txt = "Sudden infant death syndrome rate*", 
           legend.pos = 'topleft', legend.values.rnd = 0)
# add a title and layout
layoutLayer(title = "Sudden Infant Death Syndrome in North Carolina, 1974-1978", 
            sources = "", north = TRUE, scale = 50,tabtitle = TRUE,
            theme = "sand.pal", frame = FALSE,  
            author = "*per 100,000 live births. Source: North Carolina SIDS data set")


Dans cette série de cartogrammes les superficies des régions sont propotionnelles aux nombres de naissances sur la période 1974-1978.

Cartogramme continu

nc_cont <- cartogram_cont(nc, "BIR74")

Un autre type de cartogrammes continus (Gastner, Newman 2004) était disponible via les packages Getcartr et Rcartogram (voir Faire des anamorphoses cartographiques avec Getcartr), mais cette solution de semble plus fonctionner actuellement.

Cartogramme discontinu

nc_ncont <- cartogram_ncont(nc, "BIR74")

Cartogramme de Dorling

nc_dorling <- cartogram_dorling(nc, "BIR74", 
                                k = 5)

Avec ce type de cartogramme il est possible d’utiliser un poids pour les déplacements des cercles. Plus ce poids est proche de 0 plus le cercle sera proche de son emplacement d’origine et 1 est le poids maximal.
Ici nous affectons un poids proportionnel à la valeur de la variable, les plus gros cercles bougeront moins que les plus petits. Cela aura pour résultat de structurer la carte par les régions ayant les plus fortes valeurs.

w <- 1 - (nc$BIR74 / max(nc$BIR74)) 
nc_dorling <- cartogram_dorling(nc, "BIR74", m_weight = w, 
                                k = 5)

Reférences


OpenEdition vous propose de citer ce billet de la manière suivante :
Timothée Giraud (5 juillet 2018). Faire des cartogrammes avec R. R Géomatique. Consulté le 9 décembre 2024 à l’adresse https://doi.org/10.58079/tp4d


4 réflexions sur « Faire des cartogrammes avec R »

  1. Pour le cartogramme Dorling, comment faire pour indiquer une légende de la taille des cercles (quand, par exemple, la couleur n’est pas fonction d’un nombre, mais d’une proportion). Par exemple avec des cercles indiquant la taille de la population, et la couleur la proportion de femmes dans cette population.

    1. Bonjour,
      Le package ne propose pas de légendes pour les cercles pour l’instant. Il faudrait leur proposer une solution (je me demande si je n’ai pas un collègue qui a déjà travailler sur ce point).

  2. Bonjour,
    Merci pour cet article.
    Le lien vers le jeu de donnée de test est HS. Auriez-vous connaissance d’une alternative ?
    Merci.
    S.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.