Cartographie avec R

T. Giraud

3 avril 2018 - Tuto@Mate

“La science est infaillible,
mais les savants se trompent toujours.”
Anatole France, 1889
science

La recherche reproductible

  • Les sciences se reposent sur le principe de reproductibilité.

  • La reproductibilité est un élément permettant d’évaluer la validité des résultats.

  • En sciences sociales, l’utilisation de l’informatique facilite la reproductibilité.

Le spectre de la reproductibilité

Peng, 2011 Peng, 2011

Accompagner les publications scientifiques des jeux de données et codes sources pour permettre aux collègues de reproduire les résultats.

Cartographie reproductible ?

Les cartes, comme les autres production graphiques ou statistiques sont des éléments à part entière des études scientifiques.

Peng, 2011

Cartographie reproductible ?

  • Garder une trace cohérente des traitements effectués
  • Partager ses méthodes
  • Etre transparent, s’exposer à la critique
  • Faciliter les mises à jour
  • Travailler collectivement
  • Automatiser des taches
  • Lier fortement l’analyse et la représentation

Cartographie reproductible ?

Drawing
La grande majorité des cartes produites dans un contexte académique sont issues de processus complexes. Elles sont donc souvent produites en utilisant une grande variété de logiciels et de formats.

Cartographie reproductible ?

Drawing
Cette variété de formats et de logiciels rend difficile la reproduction des cartes.

Cartographie reproductible !

Drawing Simplifier les chaines de traitement pour couvrir les différentes étapes de la construction cartographique.


R logo

R

  • R est un langage et un environnement permettant de réaliser une variété de traitements statistiques et de représentations graphiques.

  • R est un logiciel libre sous license GNU General Public License.

  • R est multiplateforme (GNU/Linux, Windows, OS X…).

Un jeu d’outils et de technologies

  • Un large ecosystème d’extensions créées par les contributeurs (les fameux packages),

  • Un environnement de développement intégré (l’IDE RStudio),

  • Des solutions de literate programming, tel que le Markdown et le RMardown,
    > Literate programming : Une explication de la logique du programme en langage naturel, entremêlée de morceaux de code source.
  • Des logiciels de gestion de version (git et svn).

Les fonctionnalités spatiales de R
sf gif

Les packages historiques

Le package sf

  • Les fonctionnalités de sp, rgeos et rgdal dans un package unique.

  • Manipulation plus aisée, objets plus simples

  • Auteur principal et maintainer : Edzer Pebesma (auteur de sp)

  • Compatible avec les syntaxes pipe et les opérateurs du tidyverse.

Le package sf

Format des objets spatiaux sf

format sf

Le package sf

Import de données

Reading layer `martinique' from data source `/home/tim/Documents/prz/tuto-mate/data/martinique.shp' using driver `ESRI Shapefile'
Simple feature collection with 34 features and 23 fields
geometry type:  POLYGON
dimension:      XY
bbox:           xmin: 690574.4 ymin: 1592426 xmax: 736126.5 ymax: 1645660
epsg (SRID):    32620
proj4string:    +proj=utm +zone=20 +datum=WGS84 +units=m +no_defs

Le package sf

Affichage de données

Le package sf

Extraire les centroïdes

Le package sf

Construire une matrice de distances

Units: m
          [,1]     [,2]      [,3]      [,4]      [,5]
[1,]     0.000 35297.56  3091.501 12131.617 17136.310
[2,] 35297.557     0.00 38332.602 25518.913 18605.249
[3,]  3091.501 38332.60     0.000 15094.702 20226.198
[4,] 12131.617 25518.91 15094.702     0.000  7177.011
[5,] 17136.310 18605.25 20226.198  7177.011     0.000

Le package sf

Agréger des polygones

Le package sf

Construire une zone tampon

Le package sf

Réaliser une intersection

Le package sf

Réaliser une intersection

Le package sf

Construire des polygones de Voronoi google: “st_voronoi R sf” (https://github.com/r-spatial/sf/issues/474 & https://stackoverflow.com/questions/45719790/create-voronoi-polygon-with-simple-feature-in-r)

Le package cartography

Symboles proportionnels

Symboles proportionnels

map1

Carte choroplèthe

Carte choroplèthe

map2

Palettes de couleurs

Palettes de couleurs

Palettes de couleurs

Discrétisations

Discrétisations

Combinaisons

Combinaisons

map3

Labels

Labels

map3

Tuiles OpenStreetMap

Tuiles OpenStreetMap

map3

Carte carroyée

Carte carroyée

map5

Carte de discontinuités

Carte de discontinuités

map6

Lissage

# Create a grid layer
nuts3.spdf@data = nuts3.df
mygrid <- getGridLayer(x = nuts3.spdf, var = c("pop2008", "gdppps2008"),
                       cellsize = 50000 * 50000, type = "regular")

# transform gdp in euros
mygrid$gdppps2008 <- mygrid$gdppps2008 * 1e+06

# list of breaks
v <- c(2920, 5000, 10000, 15000, 20000, 23500, 30000, 35000, 40000, 42720)

# save the map to a png file
# save the map in png format
png(filename = "img/map7.png", width = 600, height = 535, res = 100)
par(mar = c(0, 0, 1.2, 0))

# Plot a background layers
plot(nuts0.spdf, border = NA, col = NA, bg = "#A6CAE0")
plot(world.spdf, col = "#E3DEBF", border = NA, add = TRUE)

# set a color palette
cols <- c(rev(carto.pal("green.pal", 5)), carto.pal("orange.pal", 4))

# compute & display the potential map
smoothLayer(x = mygrid, 
            var = "gdppps2008", var2 = "pop2008", breaks = v, 
            span = 1e+05, beta = 2, mask = nuts0.spdf, 
            resolution = 50000, col = cols, 
            legend.title.txt = "Potential\nGDP per capita\n(in euros)", 
            legend.values.rnd = -2, 
            border = "grey80", lwd = 0.5, add = T, legend.pos = "topright")

# plot Europe contour
plot(rgeos::gBuffer(nuts0.spdf, FALSE, 1), add = T, col = NA, 
     border = "grey50")

# plot a layout
layoutLayer(title = "Wealth Inequalities in Europe, 2008", 
            author = "Package cartography v2.0.2", 
            sources = "Source: Eurostat, 2011", frame = TRUE, 
            scale = 500, north = FALSE, theme = "sand.pal")

# plot a text on the map
text(x = 6271272, y = 3600000, 
     labels = "Distance function:\n- type = exponential\n- beta = 2\n- span = 100 km", 
     cex = 0.8, adj = 0, font = 3)

dev.off()











#                                                                                                         .

Lissage

map7

Merci

Merci

Code & Présentation
https://github.com/rCarto/tuto-mate
cartography
Github: https://github.com/riatelab/cartography
CRAN: https://cran.r-project.org/web/packages/cartography/

Blogs
neocarto: neocarto.hypotheses.org
rgeomatic: rgeomatic.hypotheses.org

sessionInfo()

R version 3.4.4 (2018-03-15)
Platform: x86_64-pc-linux-gnu (64-bit)
Running under: Debian GNU/Linux 9 (stretch)

Matrix products: default
BLAS: /usr/lib/libblas/libblas.so.3.7.0
LAPACK: /usr/lib/lapack/liblapack.so.3.7.0

locale:
 [1] LC_CTYPE=fr_FR.UTF-8       LC_NUMERIC=C               LC_TIME=fr_FR.UTF-8       
 [4] LC_COLLATE=fr_FR.UTF-8     LC_MONETARY=fr_FR.UTF-8    LC_MESSAGES=fr_FR.UTF-8   
 [7] LC_PAPER=fr_FR.UTF-8       LC_NAME=C                  LC_ADDRESS=C              
[10] LC_TELEPHONE=C             LC_MEASUREMENT=fr_FR.UTF-8 LC_IDENTIFICATION=C       

attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base     

other attached packages:
[1] SpatialPosition_1.2.0 cartography_2.0.2     sp_1.2-7             
[4] sf_0.6-1              knitr_1.20           

loaded via a namespace (and not attached):
 [1] Rcpp_0.12.16     raster_2.6-7     magrittr_1.5     units_0.5-1      lattice_0.20-35 
 [6] plyr_1.8.4       stringr_1.3.0    udunits2_0.13    tools_3.4.4      revealjs_0.9    
[11] rgdal_1.2-18     grid_3.4.4       png_0.1-7        e1071_1.6-8      DBI_0.8         
[16] htmltools_0.3.6  rgeos_0.3-26     class_7.3-14     abind_1.4-5      yaml_2.1.18     
[21] rprojroot_1.3-2  digest_0.6.15    codetools_0.2-15 curl_3.1         rosm_0.2.2      
[26] evaluate_0.10.1  rmarkdown_1.9    stringi_1.1.7    compiler_3.4.4   backports_1.1.2 
[31] classInt_0.1-24