Categories

Archives

Billet

R, cartographie, suite

Billet publié le 08/11/2010

Comment obtenir rapidement cette carte représentant le taux brut de natalité dans divers pays d’Europe, en 2009 :

Il faut tout d’abord disposer de données (issues de Eurostat) et d’un fichier shapefile — trouvé sur le site de la Commission européenne par François “Politbistro” B. — (Voici le tout dans une archive zippée : maps.zip)

Voici le code.

library(maptools)
library(RColorBrewer)
library(classInt)
library(reshape)
setwd("~/Desktop/maps")
data <- read.table("tauxbrutnatalite.csv",header=T,sep=";")
head(data)
europe<- readShapeSpatial("CNTR_RG_60M_2006.shp",proj4string=CRS("+proj=longlat"))
summary(europe)
xcoord <- c(-10,40)
ycoord <- c(35,70)
nclr <- 6
colours <- brewer.pal(nclr, "RdBu")
v<-data$X2009
class <- classIntervals(v, nclr, style="equal")
colcode <- findColours(class, colours)
test<-match(europe$CNTR_ID,data$code)
x<-colcode[test]
x[ is.na(x) ] <- "darkgrey"
plot(europe,col=x,xlim=xcoord,ylim=ycoord)
legend(-10,70,legend=names(attr(colcode,"table")), fill=attr(colcode, "palette"), cex=1.2, bty="n")

Somme toute, ce n’est pas un code très lourd pour générer une aussi jolie carte (les couleurs auraient pu être mieux choisies, ainsi que les intervalles, mais tout ceci est grandement modifiable). Ce qui est compliqué, c’est d’associer les données dont on dispose et le fichier shapefile. Deux problèmes se posaient ici :

  1. les pays, dans le shapefile, sont indexés par leur code à 2 lettres (FR pour France…) : il fallait donc travailler un peu les données d’Eurostat, en Français
  2. il fallait ensuite être certain que R coloriait les pays avec les bonnes indications : c’est à cela que l’instruction match sert : elle établit, dans l’objet “test” une grille de correspondance entre le code-pays du fichier de données et le code-pays du fichier shapefile.

J’ai colorié en gris les pays pour lesquels les données manquent.
Maintenant, François “Politbistro” B., à toi de jouer.

[yarpp]

8 commentaires

Un commentaire par Cartographie pas si facile | Polit’bistro : des politiques, du café (09/11/2010 à 2:31)

[…] après quelques minutes de code supplémentaire, toujours avec l’aide inestimable de Baptiste Coulmont, je peux enfin mettre cette note à jour et visualiser correctement, voire […]

Un commentaire par Fr. (09/11/2010 à 2:43)

Voilà, c’est fait. Ç’aurait été impossible sans ton aide.

Un commentaire par Baptiste Coulmont (09/11/2010 à 9:31)

>Fr. Ce fut avec plaisir !

Un commentaire par Fr. (10/11/2010 à 22:02)

Au passage, je remarque que ta note introductive sur la cartographie sous R évoquait déjà tous les problèmes évoqués ci-dessus : disponibilité des données, matching, etc.

Un commentaire par Baptiste Coulmont (10/11/2010 à 23:03)

Eh oui… Mais parfois répêter aide à fixer les idées. En plus, la note introductive traitait du package “maps”, et pas de l’usage des .shp / shapefiles

Un commentaire par Bruno (28/06/2012 à 15:53)

Bonjour
je trouve cette carte et exemple super intéressant. Pour tester mes propres données de présence d’espèces j’aimerai pouvoir séparer la corse du continent (idem avec Baléares, Sardaigne). Or avec le code 2 lettres pays les iles semblent incluses. Y aurait il des sous-divisions existantes (car je vois que europe$CNTR_ID a une longueur de 255) ou une manip simple pour rendre la Corse indépendante le temps d’une carte ??
Merci d’avance pour toutes pistes

Un commentaire par José (06/01/2013 à 23:57)

Loin de moi l’idée de vous prêter cette idée, mais on voit sur cet exemple comment des opinions peuvent être manipulées en catimini. Ici, c’est aux faibles natalité qu’a été associé le rouge, culturellement synonyme de danger. Alors qu’on aurait pu partir du principe bleu::froid::faible natalité et rouge::chaud::forte natalité, en appuyant sur ce côté-là du danger. Tout ceci sans que le lecteur en prenne conscience la plupart du temps.
Comme quoi, même involontairement, aucun message n’est neutre…