mapinsetr, faire un carton avec R

Dans un billet précédent, je proposais une solution pour créer des cartons cartographique en jouant avec les paramètres graphiques des figures.
Dans celui-ci j’introduis le package mapinsetr qui permet de créer « en dur » des fond de carte comprenant des cartons.
J’utilise les jeux de données, la problématique et une partie du code proposés par Arthur Charpentier dans son post « Cartographier le vote pour le Brexit« .

Le script complet (import et préparation des données, visualisations) est disponible ici.

[MAJ 15-12-2016] Ajout de la source des données [/MAJ]

Vote majoritaire au référendum sur le brexit

library(cartography)
plot(UK, ylim = c(3100000, 4100000), xlim = c(2950000, 3750000), 
     col = NA, border = NA, bg = "#A6CAE0")
plot(IRL, col = "lightgrey", border = NA, add=TRUE)
plot(FR, col = "lightgrey", border = NA, add=TRUE)
typoLayer(spdf = UK, spdfid = "id", 
          df = referendum, dfid = "HASC_code", 
          var = "brexit", 
          col = c("#5A9C50", "#EC4E49"), 
          legend.pos = 'topleft',
          legend.title.txt = "", 
          add = TRUE)
layoutLayer(title = "Vote majoritaire au référendum sur le brexit", 
            author = "Données: The Electoral Comission (https://frama.link/ElectoralCommissionUK)", 
            sources = "Fond de carte: GADM 2.8 (http://gadm.org/)", 
            theme = "blue.pal", scale = 100)

majo

Part du Leave dans le vote au référendum

plot(UK, ylim = c(3100000, 4100000), xlim = c(2950000, 3750000), 
     col = NA, border = NA, bg = "#A6CAE0")
plot(IRL, col = "lightgrey", border = NA, add=TRUE)
plot(FR, col = "lightgrey", border = NA, add=TRUE)
# limites des classes
bks <- c(min(referendum$shareLeave), 
         seq(30,70,10), 
         max(referendum$shareLeave))
# palette de couleur
cols <- carto.pal(pal1 = "green.pal", n1 = 3, 
                  pal2 = "red.pal", n2 = 3)
choroLayer(spdf = UK, spdfid = "id", 
           df = referendum, dfid = "HASC_code", 
           var = "shareLeave", breaks = bks,
           col = cols, 
           legend.pos = 'topleft',
           legend.title.txt = "Part du vote 'leave'\n (en %)", 
           add = TRUE)
layoutLayer(title = "Part du 'Leave' au référendum sur le brexit", 
            author = "Données: The Electoral Comission (https://frama.link/ElectoralCommissionUK)", 
            sources = "Fond de carte: GADM 2.8 (http://gadm.org/)", 
            theme = "blue.pal", scale = 100)

shareleave

Part du Leave rapporté au nombre de suffrages exprimés

Il est intéressant de représenter simultanément la part de vote pour le Leave et le nombre total de votes exprimés. Pour cela nous allons combiner une représentation en cercles proportionnels (pour le nombre de votes exprimés) et une colorations de ceux-ci en fonction de la part du vote pour le Leave.

plot(UK, ylim = c(3100000, 4100000), xlim = c(2950000, 3750000), 
     col = "grey50",  border = "grey80",lwd = 0.5, bg = "#A6CAE0")
plot(IRL, col = "lightgrey", border = NA, add=TRUE)
plot(FR, col = "lightgrey", border = NA, add=TRUE)
propSymbolsChoroLayer(spdf = UK, spdfid = "id", 
                      df = referendum, dfid = "HASC_code", 
                      var = "nvote",inches = 0.2, 
                      var2 = 'shareLeave',
                      breaks = bks,
                      col = cols)
layoutLayer(title = "Répartition et part du 'Leave' au référendum sur le brexit", 
            author = "Données: The Electoral Comission (https://frama.link/ElectoralCommissionUK)", 
            sources = "Fond de carte: GADM 2.8 (http://gadm.org/)", 
            theme = "blue.pal", scale = 100)
text(x = 3018138, y = 3255515, 
     font = 2, srt = 33, cex = 1, pos = 4,
     labels = "La carte n'est pas lisible\ndans la région de Londres")

shareleaveprop
Ce premier essai n’est pas totalement concluant, il est très difficile de lire la carte dans la région de Londres où les unités sont très petites et où les cercles se superposent.
Nous allons donc créer un carton de zoom sur la région de Londres avec le package mapsinsetr.

Installation du package

Le package est hébergé sur GitHub seulement pour l’instant.

library(devtools)
install_github('riatelab/mapinsetr')

Création du fond de carte contenant le carton de zoom

library(mapinsetr)
# définition d'une bounding box autour de la région de Londres
bb <- matrix(data = c(3598988, 3648341, 3177688, 3221347), 
             nrow = 2, ncol = , byrow = T  )
# création d'un masque destiné à extraire les unités londoniennes
londonMask <- create_mask(bb = bb,
                          add = FALSE, 
                          prj = UK@proj4string)
# déplacement et redimensionnement des unités
zoomLondon <- move_and_resize(spdf = UK, 
                              mask = londonMask, 
                              xy = c(3001055, 3196670), 
                              k = 4)
# déplacement et redimensionnement du masque
zoomBox <- move_and_resize(spdf = londonMask, 
                           mask = londonMask, 
                           xy = c(3001055, 3196670), 
                           k = 4)
# fusion du fond de carte initial et du zoom
UK2 <- inset_rbinder(list(UK, zoomLondon))
# affichage du fond de carte
plot(UK2)
layoutLayer("Fond de carte UK avec zoom sur Londres", scale = NULL, 
            north = FALSE, sources = "", author = "")

uk2

Cartographie avec le nouveau fond de carte

plot(FR, ylim = c(3100000, 4100000), xlim = c(2950000, 3750000), 
     col = 'lightgrey', border = NA, bg = "#A6CAE0")
plot(IRL, col = "lightgrey", border = NA, add=TRUE)
plot(UK2, col = "grey50", border = "grey80",lwd = 0.5,  add=TRUE)
plot(zoomBox, lwd = 1, add=T)
text(x = 3001055, y = 3196670, labels = "Zoom sur Londres", 
     adj = c(0,1.5), cex = 0.7 )
propSymbolsChoroLayer(spdf = UK2, spdfid = "id", 
                      df = referendum, dfid = "HASC_code", 
                      var = "nvote",inches = 0.2, 
                      legend.var.title.txt = "Nombre de\nvotes exprimés", 
                      legend.var.pos = "topleft", 
                      var2 = 'shareLeave',
                      legend.var2.pos = "left", 
                      legend.var2.values.rnd = 0,
                      legend.var2.title.txt = "Part du vote\n'Leave' (en %)", 
                      breaks = bks,
                      col = cols)
plot(londonMask, lwd = 1, add=T)
layoutLayer(title = "Répartition et part du 'Leave' au référendum sur le brexit", 
            author = "Données: The Electoral Comission (https://frama.link/ElectoralCommissionUK)", 
            sources = "Fond de carte: GADM 2.8 (http://gadm.org/)", 
            theme = "blue.pal", scale = 100)

shareleaveprop2
Cette carte est plus satisfaisante, la situation dans la capitale du Royaume-Uni est beaucoup plus lisible.


5 réflexions au sujet de « mapinsetr, faire un carton avec R »

Laisser un commentaire

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