Conçu comme une boite à outil cohérente et documentée dédiée à la cartographie thématique, le package cartography permet de créer des cartes avec R.
Les représentations les plus classiques sont bien entendu disponibles (symboles proportionnels, cartes choroplèthes, cartes qualitatives) et d’autres modes de représentations souvent difficiles à mettre en œuvre dans un logiciel de cartographie sont aussi proposées (cartes de flux, discontinuités, carroyages, cartes par points…).
Le package propose également quelques fonctionnalités supplémentaires : palettes de couleurs (simples et doubles gradations dissymétriques), éléments d’habillage (échelle , orientation, titre, sources, étiquettes…), des légendes paramétrables, et enfin l’accès à des API cartographiques…
Ce package est développé au sein de l’UMS RIATE par Timothée Giraud et Nicolas Lambert. La version stable est sur le CRAN, la version de développement est hébergée sur GitHub.
Pour avoir un aperçu rapide de la manière dont on peut utiliser le package, cette vignette développe, via des scripts commentés, quelques exemples de création de cartes.
Ci-dessous vous trouverez le code qui permet de générer la composition cartographique réalisée avec le package :
library(cartography)
# Load data
data(nuts2006)
# Save image
# png("cartocomp.png", width = 700, height = 600, res=96)
# set margins
opar <- par(mar = c(0,0,0,0))
# Plot basemaps
plot(nuts0.spdf, border = NA, col = NA, bg = "#A6CAE0")
plot(world.spdf, col = "#E3DEBF80", border=NA, add=TRUE)
plot(nuts0.spdf, border = "white", col = "#E3DEBF", lwd= 1.1, add=T)
# Plot an OSM Layer
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c('AT', 'CH', "SI", "IT"),]
OSMTILES <- getTiles(spdf = spdf, type = "osm", zoom = 5)
tilesLayer(OSMTILES, add=T)
# Plot a choropleth layer
spdf <- nuts2.spdf[substr(nuts2.spdf$id,1,2) =="DE",]
nuts2.df$gdppercap <- nuts2.df$gdppps2008 / nuts2.df$pop2008
choroLayer(spdf = spdf, df = nuts2.df, var = "gdppercap", border = "white",
lwd = 0.4, col = carto.pal(pal1 = "sand.pal", n1 = ),
legend.pos = "n", add= TRUE)
# Plot proportional squares
spdf <- nuts1.spdf[substr(nuts1.spdf$id,1,2) %in% c("BE", "NL", "LU"),]
propSymbolsLayer(spdf = spdf, df = nuts1.df, var = "pop2008",
border = "#7C000C",
symbols = "square", k = 0.15, col = "#ff000080",
legend.pos = "n")
# Plot proportional bars
spdf <- nuts1.spdf[substr(nuts1.spdf$id,1,2) %in% c("TR"),]
plot(spdf, add=T, col = NA, border = "grey50", lwd = 0.5, lty = 2)
propSymbolsLayer(spdf = spdf, df = nuts1.df, var = "pop2008",
symbols = "bar", k = 0.05, col = "#155F28",
legend.pos = "n", border = "grey")
# Plot a typologie layer
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("EE","LT",'LV'),]
typoLayer(spdf = spdf, df = nuts3.df, var = "id", add=T, legend.pos = "n")
# Plot proportional circles
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("FI"),]
propSymbolsLayer(spdf = spdf, df = nuts3.df, var = "pop2008",
k = 0.05, col = "#301551", legend.pos = "n", border = "white")
# Create and plot a grid layer (absolute)
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("FR"),]
mygrid <- getGridLayer(spdf = spdf,cellsize = 50000)
datagrid.df <- getGridData(mygrid, nuts3.df, "pop2008",dfid=NULL)
propSymbolsLayer(spdf = mygrid$spdf, df = datagrid.df,
legend.pos = "n", border = "white",
var = "pop2008", k=0.019, col="darkblue", add=TRUE)
# Create and plot a grid layer (relative)
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("ES", "PT"),]
mygrid <- getGridLayer(spdf = spdf,cellsize = 75000)
datagrid.df <- getGridData(mygrid, nuts3.df, "pop2008",dfid=NULL)
datagrid.df$densitykm <- datagrid.df$pop2008_density*1000*1000
cols <- carto.pal(pal1 = "wine.pal", n1 = 6)
choroLayer(spdf = mygrid$spdf,df = datagrid.df,var = "densitykm", add=TRUE,
border = "grey80",col=cols,
legend.pos = "n", method = "q6")
# Plot a dot density layer
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("SE", "NO"),]
dotDensityLayer(spdf = spdf, df=nuts3.df,var="pop2008", add = TRUE,
col = "grey30",
n = 100000, pch = 20, cex = 0.5, legend.pos = "n")
# Plot a proportional links layer
twincities.df <- twincities[substr(twincities$i,1,2) %in% c("IT") &
substr(twincities$j,1,2) %in% c("IT",'AT', "SI",
"GR", "CH"), ]
twincities.spdf <- getLinkLayer(spdf = nuts2.spdf, df = twincities.df[,1:2])
gradLinkLayer(spdf = twincities.spdf, df = twincities.df,
spdfids = "i", spdfide = "j",
dfids = "i", dfide = "j",legend.pos = "n",
var = "fij", breaks = c(1,2,4,10), lwd = c(0.5,4,10),
col = "#92000090", add = TRUE)
# Plot a label layer
spdf <- nuts0.spdf[nuts0.spdf$id %in% c("IS", "CY"),]
df <- data.frame(id = spdf$id, names = c("Chypre", "Islande"))
labelLayer(spdf = spdf, df = df, txt = "names", font = 2)
# Plot Discontinuities
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("PL", "CZ", "SK", "HU"),]
bord <- getBorders(spdf)
cols <- carto.pal(pal1 = "blue.pal", n1 = 3, pal2 = "green.pal", n2 = 3)
nuts3.df$gdppercap <- nuts3.df$gdppps2008/nuts3.df$pop2008
choroLayer(spdf = spdf, df = nuts3.df, var = "gdppercap", method = "q6",
col = cols, add=T, border = NA, legend.pos = F)
discLayer(spdf = bord, df = nuts3.df,
var = "gdppercap", col="red", nclass=5,
method="quantile", threshold = 0.25, sizemin = 1,
sizemax = 3, type = "rel",
legend.pos = "n", add=TRUE)
# Plot a double proportional triangles layer
spdf <- nuts1.spdf[substr(nuts1.spdf$id,1,2) %in% c("IE","UK"),]
propTrianglesLayer(spdf = spdf, df = nuts1.df, var1 = "birth_2008",
var2 = "death_2008", legend.pos = "n", k = 0.075)
# Plot a proportional symbols layer + choro
spdf <- nuts3.spdf[substr(nuts3.spdf$id,1,2) %in% c("GR", "BG", "RO", "MK"),]
propSymbolsChoroLayer(spdf = spdf, df = nuts3.df, var2 = "gdppercap",
var = "gdppps2008",add=T, k = 0.05,
col = carto.pal(pal1 = "orange.pal", 8),
legend.var.pos = "n", legend.var2.pos = "n")
# Plot a proportional symbol layer + typo
spdf <- nuts2.spdf[substr(nuts2.spdf$id,1,2) %in% c("DK"),]
nuts2.df$bidon <- 5
propSymbolsTypoLayer(spdf = spdf, df = nuts2.df, var = "bidon", var2 = "id",
add=T,
legend.var.pos = "n", legend.var2.pos = "n")
# Plot a layout (sources, scale, text, etc.)
layoutLayer(title = "",
sources = "Eurostat - 2008, OpenStreetMap et contributeurs - 2015",
author = "T. Giraud & N. Lambert © UMS RIATE - 2015",
col = NA,
coltitle = "black",
frame = FALSE,
south = TRUE)
text(x = 6278256, y = 4273436, labels = "Composition\ncartographique
réalisée avec\nle package\ncartography",
cex = 1.2, adj = 1, pos = 1, font=2)
# dev.off()
Un coup d’œil dans Synaptic m’a permis de voir différents paquets, dont “sf”, etc.Il suffisait de les installer. Maintenant, “cartography” est installé via rstudio.
Bonne nouvelle, en effet sf nécessite l’installation de librairies système (GEOS, GDAL, PROJ) et l’utilisation de packages binaires (via apt) peut aider. Bonne cartographie!
Précision. La dernière tentative d’installation s’est faite via le Terminal, avec lequel j’ai lancé R en mode super-utilisateur.
Bonjour,
J’essaie de me remettre à la cartographie avec R, après des débuts lointains et peu concluants. Dans une Debian Buster, j’ai installé R et RStudio. J’ai pu installer quelques paquets, mais certains me résistent,… dont “cartography”. Ce matin, trois paquets lui étaient indispensables : j’ai pu installer “rgeos” (après avoir vu qu’il lui en fallait d’autres au préalable). Mais “units” et “sf” boudent…
Warning messages:
1: In install.packages(“cartography”) :
l’installation du package ‘units’ a eu un statut de sortie non nul
2: In install.packages(“cartography”) :
l’installation du package ‘sf’ a eu un statut de sortie non nul
3: In install.packages(“cartography”) :
l’installation du package ‘cartography’ a eu un statut de sortie non nul
Merci de votre aide,
Frédéric Stévenot
Ping : Rの使用法:さまざまなマップの1, ggmap | Think it aloud
Ping : Cartographie avec R : le package cartography | R Géomatique
Ping : R pour les cartographes | Carnet (neo)cartographique