Le package cartography

cartocomp

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()

7 réflexions sur « Le package cartography »

  1. 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!

  2. Précision. La dernière tentative d’installation s’est faite via le Terminal, avec lequel j’ai lancé R en mode super-utilisateur.

  3. 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

  4. Ping : Rの使用法:さまざまなマップの1, ggmap | Think it aloud

  5. Ping : Cartographie avec R : le package cartography | R Géomatique

  6. Ping : R pour les cartographes | Carnet (neo)cartographique

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.