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
- Dorling, D. (1996). Area Cartograms: Their Use and Creation. In Concepts and Techniques in Modern Geography (CATMOG), 59.
- Dougenik, J. A., Chrisman, N. R., & Niemeyer, D. R. (1985). An Algorithm To Construct Continuous Area Cartograms. In The Professional Geographer, 37(1), 75-81. (paywall)
- Gastner, M. T., & Newman, M. E. J. (2004). Diffusion-based method for producing density-equalizing maps. In Proceedings of the National Academy of Sciences 101(20) 7499-7504.
- Olson, J. M. (1976). Noncontiguous Area Cartograms. In The Professional Geographer, 28(4), 371-380. (paywall)
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
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.
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).
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.
Bonjour, le jeu de données est contenu dans le package sf. Si le package est installé il ne devrait pas y avoir de problèmes.