
Bueno, pues sin intentar ser tan espectacular, ya que no tengo los conocimientos suficientes, vamos a explicar de forma sencilla cómo se puede utilizar el mapa de Barcelona o de cualquier otra ciudad, región o estado.
En primer lugar debemos obtener el mapa propiamente dicho. En el caso de Barcelona nos vamos al Geoportalbcn del Ayuntamiento de Barcelona y concretamente a la pestaña de descargas. Allí nos podemos descargar varios archivos en diferentes formatos. A nosotros nos interesan los archivos de las Divisiones administrativas en formato SHP (ESRI shapefile). Estas divisiones administrativas son de diversos tipos: distritos, barrios, secciones censales,... Para trabajar con pocos datos tomaremos como unidades los 10 distritos. De modo que descomprimimos el archivo y nos preparamos para su lectura en R con la carga de algunos paquetes.
library(sp)
library(rgdal)
library(classInt)
library(RColorBrewer)
setwd("~/R/DIVADM_SHP")
ogrInfo(".", "BCN_Districte_SHP")
Para utilizar el paquete rgdal es preciso disponer de los programas adecuados que en linux se instalan con la siguiente instrucción:
$ sudo apt-get install libgdal1-dev libproj-dev
Las siguientes instrucciones leen el mapa y nos informan de su contenido:
ogrInfo(".", "BCN_Districte_SHP")
map.bcn <- readOGR(".",layer="BCN_Districte_SHP")
names(map.bcn)
En particular, los nombres de los distritos no son correctos seguramente por problemas de codificación, luego hay que arreglarlo:
map.bcn$NDistric <- c("Ciutat Vella","Eixample",
"Sants-Montjuïc",
"Les Corts", "Sarrià-Sant Gervasi", "Gràcia",
"Horta-Guinardó", "Nou Barris", "Sant Andreu",
"Sant Martí")
Ahora necesitamos una variable con los datos que queremos representar: demográficos, políticos,...
En este caso vamos a utilizar la proporción de mujeres en cada distrito ya que son datos incluidos en el propio archivo que hemos leído, pero que conste que podemos utilizar cualquier vector de datos, tantos como unidades territoriales.
plot_var <-
map.bcn@data[, "Dones"]/(map.bcn@data[,"Dones"]+map.bcn@data[,"Homes"])
A continuación preparamos los intervalos y los colores:
cuts <- 8
plot_pal <- brewer.pal(cuts, "Purples")
plot_intvl <- classIntervals(plot_var, cuts, style="pretty")
plot_colors <- findColours(plot_intvl, plot_pal)
y ya podemos dibujar el mapa:
plot(map.bcn, col=plot_colors, border="black")
title("Percentatge de dones a Barcelona")
text(map.bcn$Coord_X,map.bcn$Coord_Y,map.bcn$NDistric)
Finalmente podemos añadir la leyenda:
plot_lbls <- paste(round(100*plot_intvl$brks, 0), "%", sep="")[seq(2, length(plot_intvl$brks)-1)]
plot_lbls <- c(
paste("menys del", head(plot_lbls[1],1)),
paste(head(plot_lbls,-1), "-", tail(plot_lbls,-1)),
paste("més del", tail(plot_lbls,1))
)
legend("bottomright",
legend=plot_lbls, fill=attr(plot_colors, "palette"),
bty="n", border=attr(plot_colors, "palette"), cex=0.9
)
Referencias
http://www.nceas.ucsb.edu/scicomp/usecases/ReadWriteESRIShapeFiles
Maps with R de Oscar Perpiñán