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))

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

# 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]&parametre<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")