R es un programa muy flexible y permite hacer multitud de gráficas. Recientemente encontré un paquete que ayuda en la generación de mapas y una página web que otorga mapas administrativos de cualquier país del mundo en un formato compatible con R.

Para este tema me ha ayudado mucho el ejemplo de Beatriz Martínez que aparece en RPubs.

El paquete en cuestion se llama sp, que permite dibujar gráficas a partir de coordenadas espaciales. Los mapas se pueden descargar de gadm.org, esta web permite descargar en multitud de formatos, entre los que se encuentran datos para R.

En mi caso me interesa crear un mapa de Asturias con las áreas sanitarias, que se corresponden con los datos de comarcas.

Para poder trabajar tenemos que instalar primeramente el paquete sp y cargarlo en memoria:

install.packages("sp")
library(sp)

Vamos a intentar mostrar un mapa de Asturias con sus concejos.

Nos descargamos de la web anterior el mapa de España con información de las comarcas. De esta manera se cargan los datos en la memoria de R. La variable que se carga se llama gadm, cogemos los datos que nos interesan y los guardamos en la variable asturias:

load(url("http://gadm.org/data/rda/ESP_adm3.RData"))  # Carga en memoria ESP_adm4.RData, que es un objeto con los datos de los municipios de España
asturias <- gadm[gadm$NAME_2=="Asturias",]

Podemos ver los datos asociados a la variable asturias con el la siguiente llamada.

asturias@data

El objeto gadm es un objeto S4 que contiene "slots" por lo que es necesario añadir @data al nombre de la variable.

El enlace anterior puede modificarse según se quieran para mostrar diferentes agrupamientos administrativos. Sin en lugar de ESP_adm4 ponemos ESP_adm0 tendremos únicamente el contorno del país, ESP_adm1 las comunidades autónomas, ESP_adm2 las provincias, ESP_adm3 las comarcas y ESP_adm4 los municipios.

Ya podemos dibujar un mapa de asturias

spplot(asturias, "Shape_Area") #El primer parámetro es el objeto con el mapa, el segundo parámetro es la variable a partir de la cual se generan los colore en este caso cogemos "Shape_Area" como ejemplo.

Los datos recibidos de GADM tienen el texto en una codificación que no es compatible con sp (muestra los acentos y las eñes de manera incorrecta), por lo que tenemos que transformarlos a un formato compatible con la función iconv. La variable NAME_1 contiene los nombres de las comunidades autónomas:

asturias$NAME_1 <- as.factor(iconv(as.character(asturias$NAME_1), "latin1", "utf-8"))
asturias$NAME_2 <- as.factor(iconv(as.character(asturias$NAME_2), "latin1", "utf-8"))
asturias$NAME_3 <- as.factor(iconv(as.character(asturias$NAME_3), "latin1", "utf-8"))

Cambiamos los nombres a las comarcas para que se correspondan con las Áreas Sanitarias de Asturias:

levels(asturias$NAME_3) <- c("Área III", "Área VII", "Área I", "Área V", "Área II", "Área VIII", "Área VI", "Área IV")

Para que los mapas queden con colores más bonitos podemos instalar el paquete RColorBrewer, que tene multitud de paletas de colores pensadas para mapas.

install.packages("RColorBrewer") #En el caso de que no nos hayamos descargado el paquete
library("RColorBrewer")

 Ahora ya podemos mostrar las variables en el mapa:

spplot(asturias, "NAME_3", col.regions = colorRampPalette(brewer.pal(8, "Set2"))(8),col = "white")

 Vamos a insertar nuestros datos aleatorios para cada Área, y creamos un data.frame:

ejemplo <- data.frame(NAME_3=c("Área I", "Área II", "Área III", "Área IV", "Área V", "Área VI", "Área VII", "Área VIII"), cantidad=sample(1:100, 8))

 Añadimos estos datos al mapa. La fusión de las tablas se produce a través de los nombre de variables que coinciden en ambas tablas, en nuestro caso es la variable NAME_3, que aparece en ambas tablas.

merged <- merge(asturias@data, ejemplo)

Al fusionar los datos se mezclan las filas, por lo que hay que reordenarlas:

correct.ordering <- match(asturias$NAME_3, merged$NAME_3)
asturias@data <- merged[correct.ordering]

Ahora dibujamos el mapa con nuestros datos que tienen el nombre "cantidad". :

spplot(asturias, "cantidad", col.regions = colorRampPalette(brewer.pal(9, "YlGnBu"))(max(asturias@data$cantidad)),col = "white")

Aquí tenemos nuestro mapa:

No tiene permiso suficiente para añadir comentarios