sábado, 16 de junio de 2012

1/1000 Maneras de Graficar un Mapa en R

Que tal chibchombianos!

Así como existen 1000 maneras de morir tambien podemos hablar de que existen 1000 formas de hacer todo en R y en este caso graficar un mapa no es la excepción. Aunque personalmente me tomo tiempo encontrar una forma rápida y sencilla para lograrlo, aqui les ahorro esfuerzo y sufrimiento!...

Simplemente deben seguir las siguientes pasos para ser felices:

1. Descargar el shapefile.
El shapefile es un formato para sistemas de información geográfica. De acuerdo con la Wiki es un formato vectorial de almacenamiento digital donde se guarda la localización de los elementos geográficos y los atributos asociados a ellos. Si bien la definición es básica, es increible la cantidad de información descriptiva de un mapa que se puede almacenar en un shapefile.

Existe un shapefile disponible casi que para cualquier región y es posible encontrar varios sitios en la web que permiten acceder gratuitamente a sus shapefiles, en este caso les recomiendo la base de datos del GADM a la cual podrán acceder con el siguiente link http://www.gadm.org/ 

Otros links de interés 

Para el ejemplo utilizaremos la base de datos del GADM, asi que vayan a la sección de descarga y seleccionen el mapa de Uzbekistan (de paso se enteran que existe este país) y descarguen el shapefile respectivo. 

1a. Instalen y carguen en R las bibliotecas maptools, sp y RColorBrewer

Para instalar los paquetes:

> install.packages("maptools",lib="/directorio")

Para cargar:

> library(maptools) 
# Provee herramientas para leer y manejar objetos espaciales
> library(sp) 
#Provee métodos para manejar datos espaciales
> library(RcolorBrewer) 
# Permite acceder a paletas de colores para cartografía
http://colorbrewer2.org/

1b. Ahora lean el shapefile y conviertanlo en un vector, en este caso lo llamé ohsi
> ohsi<-readShapeSpatial("UZB_adm1.shp") 
#Corresponde al mapa politico de Uzbekistan

1c. Comprueben que se cargo el mapa
> plot(ohsi)

1d. Pueden incluso revisar la estructura interna del vector 
> str(ohsi)
> ohsi@data
1.e. Asignen el vector como una variable
> mapa=ohsi

2. El siguiente paso es construir una tabla que contenga en una columna las localidades "LOCAL" y en la siguiente columna algún criterio para la selección de las localidades, en este caso el criterio fue "lugares que quiero visitar en Uzbekistan" y la llame "VISITA"  :P. Es importante guardar la tabla en formato csv o delimitado por espacios.

Aqui tienen la tabla
"lOCAL"    "VISITA"
"Andijon"    "NA"
"Bukhoro"    1
"Ferghana"    "NA"
"Jizzakh"    "NA"
"Karakalpakstan"    "NA"
"Kashkadarya"    "NA"
"Khorezm"    "NA"
"Namangan"    "NA"
"Navoi"    "NA"
"Samarkand"    1
"Sirdaryo"    "NA"
"Surkhandarya"    "NA"
"Tashkent City"    "NA"
"Tashkent"    1

La codificación corresponde a: NA=No aplica y 1=lugares que quiero visitar
2a. Ahora deben abrir el archivo de la tabla y crear otro vector  el cual llamé "yque"

> yque<-read.csv("tabla.csv",header =TRUE, sep = "\t")

2b. Revisen los datos de la columna visita en la tabla. Deberian ser visibles en la consola.

> yque$VISITA

2c. Reasignen la información de vector "yque" variable "VISITA" a "mapa" 
> mapa@data=data.frame(yque$VISITA)
> mapa

3. Aunque hay múltiples paquetes para asignar colores en un mapa, en este caso me base en la paleta de colores de colorBrewer. El color pueden seleccionarlo guiándose con el siguiente link http://colorbrewer2.org/

Ahora grafiquen el mapa con las localidades seleccionadas en "VISITA" y el color lo deben especificar en col.regions=brewer.pal() como sigue a continuación:


> spplot(mapa,c("yque.VISITA"),col.regions=brewer.pal(3, "RdYlBu"), scales=list(draw = TRUE))

Listo!! ahora tenemos el mapa de Uzbekistan y las áreas seleccionadas corresponden a las localidades que me gustarian visitar :P.

otro ejemplo


Fácil! Ahora lo pueden modicar y adaptar a sus datos. Esta es solo una forma sencilla, les recuerdo hay cientos de opciones por explorar!

Buena energia!