Carte à partir de données d'un tableur et données à faire correspondre aux identifiants d'un fond de carte

En langage R

Exemple de carte choroplèthe

Mots clefs : choroplète, chloroplète, chloroplèthe, choroplèthe (le bon est en gras)

Comment coloriser automatiquement des régions ?

Comment croiser une carte avec une tableau de données statistiques ?

et surtout...

Comment contourner le fait que l'on risque d'avoir un fond de carte qui n'identifie pas de la même façon les noms des régions que dans mon tableau ?


Voici un exemple...

1- Récupérer un fond de carte de la France (sur GADM dans cet exemple). On charge ici le niveau de résolution départemental.

Comment télécharger un fond de carte vectoriel

2- Charger la carte dans l'environnement R et l'afficher

library("maptools"); library(rgdal) # librairie maptools à installer

france_gadm<- readOGR(dsn = ".", layer = "gadm36_FRA_2", p4s=CRS("+proj=longlat"))

# Ces quelques lignes qui suivent permettent la reconnaissance des caractères spéciaux français

summary(france_gadm) ; Encoding(levels(france_gadm$NAME_1)) <- "latin1" ; Encoding(levels(france_gadm$NAME_1)) <- "UTF-8" ;

Encoding(levels(france_gadm$NAME_2)) <- "latin1" ; Encoding(levels(france_gadm$NAME_2)) <- "UTF-8" ; summary(france_gadm)

# Affichage

plot(france_gadm)

3- Créer un tableau qui regroupera les noms des régions exactement comme ils sont écrits dans le fond de carte

On évite ainsi d'essayer de faire coller un tableau sur un fond de carte alors que les noms seraient sans accent pour l'un et en majuscule et l'autre en minuscule, avec des accents mais pas de tirets...

mes_régions <- data.frame(sort(levels(france_gadm$NAME_1)))

colnames(mes_régions) <- "Mes_Régions"

library("openxlsx") # librairie permettant la création d'un tableau excel (à installer)

write.xlsx(mes_régions,file="regions_france.xlsx",fileEncoding = "UTF-8",row.names=F)

4- Reprendre le tableau créé et le compléter avec les données de son choix (ici le nombre d'habitants)

Il suffit de compléter le tableau et de le ouvrir avec R.

data <- read.xlsx("regions_france2.xlsx")

colnames(data)

5- Créer des catégories et gamme de couleurs pour colorations de la carte choroplèthe.

On va définir par exemple ici un gradient du blanc vers le rouge et 4 catégories (les régions de 0 à 2,5 Mha puis de 2,5 Mha à 4,5 Mha...)

# On liste les catégories (de 0 à 25000000, de 25000000 à 45000000...)

categories <- c(0,2500000,4500000,5500000,120000000)

# On créer un gradient de couleurs du blanc vers le rouge et on en extrait 4 couleurs

colfunc<-colorRampPalette(c("white","red"))

colors <- (colfunc(4))

# On met en place une boucle for qui va attribuer pour chaque nombre d'habitants d'une région une couleur correspondante

couleurs = c()

for ( i in data$Habitants) {

if ((i >= categories[1]) & (i < categories[2])) {couleurs <- c(couleurs,colors[1])

} else if ((i >= categories[2]) & (i < categories[3])) {couleurs <- c(couleurs,colors[2])

} else if ((i >= categories[3]) & (i < categories[4])) {couleurs <- c(couleurs,colors[3])

} else if ((i >= categories[4]) & (i < categories[5])) {couleurs <- c(couleurs,colors[4])}

}

6- On trace la carte

plot(france_gadm)

j <- 0

for (i in data$"Mes_Régions") { j <- j+1 ; plot(france_gadm[france_gadm$NAME_1==i ,],lwd=2,col=couleurs[j],add=T)}

Parfois, il faut pouvoir croiser des listes d'identifiants différentes, éviter les erreurs, afficher des légendes spéciales, coloriser ma carte rapidement.

Voici un exemple qui reprend ces problèmes dans leur globalité.