Carte de la Dordogne colorée par compilation de données INSEE
réalisée à l'aide de R
Répartition des habitants en Dordogne
Voici ci-dessous un exemple de code pour réaliser ce type de cartes avec R.
Etape 01 - Installer maptools pour pouvoir ouvrir le fond de carte au format vectoriel
install.packages("maptools") ; library(maptools)
Etape 02 - Ouvrir le fond de carte de Dordogne (format vectoriel, type shape (.shp))
Il faut télécharger ce fond de carte, disponible ici - Fond de carte de Dordogne.
dordogne<- readOGR(dsn = ".", layer = "l_commune_2017_s_24", p4s=CRS("+proj=longlat"))
# ATTENTION AUX CARACTERES SPECIAUX
Encoding(levels(dordogne$nom_com)) <- "latin1"
Encoding(levels(dordogne$nom_com)) <- "UTF-8" ;
########################################
Certains packages comme rgdal semblent être bien abandonnés, on peut alors ouvrir avec Raster :
library("raster") ; library(sf)
dordogne <- shapefile(file.choose())# fichier .shp # Ouvrir un shapefile avec Raster
crs.longlat <- CRS("+init=epsg:4326")
dordogne <- spTransform(dordogne, crs.longlat)
Etape 03 - Ouvrir les données INSEE
Il faut télécharger es données compilées dans un .csv - Le tableau de ces données est disponible ici.
# Ouverture
data <- read.csv2("2018_Data_BTX.csv",sep=";", header=T)
colnames(data)
# Récupération des codes postaux de Dordogne
code_24 <- data$CODGEO[ as.numeric(as.character(data$CODGEO))>24000 & as.numeric(as.character(data$CODGEO))<24588]
# Récupération des noms des communes de Dordogne
communes_24 <- data$LIBGEO[ as.numeric(as.character(data$CODGEO))>24000 & as.numeric(as.character(data$CODGEO))<24588]
# Nettoyage quand il y a absence de correspondance : pas de code postal pour le nom
communes_24 <- communes_24[!is.na(code_24)]
code_24 <- code_24[!is.na(code_24)]
position =c() for (i in code_24) { position =c(position ,which(data$CODGEO==i)) }
# Codes postaux des données INSEE de DORDOGNE
code_24
# Noms des communes de DORDOGNE issus des données INSEE
communes_24
## Calcul de la population par commune en Dordogne
Age <- data[position,c(3:204)]
somme = c()
for (i in c(1:length(Age[,1]))){ somme <- c(somme,sum(Age[i,])) }
Population_total <- somme
Etape 04 - Tracer la carte
# Fonction CARTO qui va permettre d'afficher un jeu des données sous forme de cartes
# Et surtout de faire une coloration et une légende automatique
carto = function(parametre,limites,nom_carte,text=c()) {
# COULEURS
colfunc<-colorRampPalette(c("white","#FBEFEF","#F5A9A9","#FF0000","#8A0808"))
colors <- (colfunc(length(limites)-1))
mes_couleurs =parametre
totaux_par_categories=c()
j = 0
for (i in c(1:(length(limites)-1))) {
j = j+1
indice <-which(parametre>=limites[i]¶metre<limites[i+1])
mes_couleurs[indice]<- colors[j]
totaux_par_categories =c(totaux_par_categories,length(mes_couleurs[indice]))
}
# PREPARER LA LEGENDE
texte=c()
for (i in c(1:(length(limites)-1))) {
if (i < (length(limites)-1)) {
temp <- paste(limites[i],"-",limites[i+1]-1,sep="")
}
if (i == (length(limites)-1)){
temp <- paste(">=",limites[i],sep="")
}
texte <- c(texte,temp)
}
texte
texte_complet = c()
j=0
for (i in texte) {
j = j+1
temp <- paste(i," (",totaux_par_categories[j]," communes)",sep="")
texte_complet = c(texte_complet,temp)
}
texte_complet
# GRAPHIQUE
nom_carte_png <- paste(nom_carte,".png")
png(nom_carte_png,width=2048,heigh=2048)
plot(dordogne,main=nom_carte,cex=3)
j = 0
for (i in code_24) {
j = j+1
plot (dordogne[which(dordogne$code_insee==i),],col=mes_couleurs[j],add=T)
}
if (length(text)>0) {text (x_communes,y_communes,text)}
legend(x="topleft", legend=texte_complet, fill=colors,cex=4)
dev.off()
}
# ON TRACE LA CARTE : elle sera sauvegardée dans le répertoire source
carto(Population_total,limites=c(0,1000,2000,4000,8000,16000,64000),"Nombre d'habitants par commune de Dordogne")