sábado, 2 de enero de 2016

Mapas temáticos usando R

Mapa temático de Elecciones venezolanas n mapas

Obtención de la data

paquetes necesarios

require(tidyr)
require(dplyr)
require(magrittr)
require(ggplot2)
require(lubridate)
library(extrafont)
require(maps)
require(maptools)
require(mapproj)
require(sp)
require(mapdata)
require(classInt)

Contamos con un mapa en formato .shp que hemo obtenido a través de una búsqueda en internet. Para conocer la estructura del objeto espacial:

str(as(ven1, "data.frame"))
## 'data.frame':    24 obs. of  5 variables:
##  $ ID_0  : int  246 246 246 246 246 246 246 246 246 246 ...
##  $ ISO   : Factor w/ 1 level "VEN": 1 1 1 1 1 1 1 1 1 1 ...
##  $ NAME_0: Factor w/ 1 level "Venezuela": 1 1 1 1 1 1 1 1 1 1 ...
##  $ ID_1  : int  1 2 3 4 5 6 7 8 9 10 ...
##  $ NAME_1: Factor w/ 24 levels "Amazonas","Anzoátegui",..: 1 2 3 4 5 6 7 8 9 10 ...

Lo que nos da un mapa sencillo:

plot(ven1)

Preparamos la data que deseamos para el mapa temático. Veamos el contenido:

#
glimpse(elecciones)
## Observations: 24
## Variables: 24
## $ ID_0       (dbl) 246, 246, 246, 246, 246, 246, 246, 246, 246, 246, 2...
## $ ISO        (fctr) VEN, VEN, VEN, VEN, VEN, VEN, VEN, VEN, VEN, VEN, ...
## $ NAME_0     (fctr) Venezuela, Venezuela, Venezuela, Venezuela, Venezu...
## $ ID_1       (dbl) 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, ...
## $ NAME_1     (fctr) Amazonas, Anzoátegui, Apure, Aragua, Barinas, Bolí...
## $ ch2012     (dbl) 39056, 409499, 155988, 552878, 243618, 387462, 6520...
## $ op2012     (dbl) 33107, 378345, 78358, 384592, 165135, 327776, 53707...
## $ ma2013     (dbl) 38271, 383125, 142023, 512379, 214671, 351988, 6106...
## $ op2013     (dbl) 34591, 424685, 87610, 432265, 196138, 381075, 59524...
## $ gpp2015    (dbl) 28822, 287145, 110590, 374479, 165172, 241629, 4391...
## $ op2015     (dbl) 31798, 450619, 93652, 468668, 216834, 386883, 64431...
## $ gobcha     (dbl) -14180, -116746, -61876, -211562, -100420, -213292,...
## $ gobMa      (dbl) 13395, 90372, 47911, 171063, 71473, 178452, 202186,...
## $ brechaMad  (dbl) -2976, -163474, 16938, -94189, -51662, -145254, -20...
## $ brechaop1  (dbl) 1484, 46340, 9252, 47673, 31003, 53299, 58164, 7680...
## $ brechaop2  (dbl) -2793, 25934, 6042, 36403, 20696, 5808, 49077, 9131...
## $ brechaCh   (dbl) 5949, 31154, 77630, 168286, 78483, 59686, 114945, 5...
## $ brechaMad1 (dbl) 3680, -41560, 54413, 80114, 18533, -29087, 15384, 3...
## $ brechagpp  (dbl) -10234, -122354, -45398, -178399, -78446, -145833, ...
## $ brechaMad2 (dbl) -785, -26374, -13965, -40499, -28947, -35474, -4139...
## $ brechaMad3 (dbl) -9449, -95980, -31433, -137900, -49499, -110359, -1...
## $ rChOp      (dbl) 1.1796901, 1.0823428, 1.9907093, 1.4375702, 1.47526...
## $ rMaOp      (dbl) 1.1063861, 0.9021392, 1.6210821, 1.1853354, 1.09448...
## $ rpar       (dbl) 0.9064092, 0.6372235, 1.1808611, 0.7990283, 0.76174...

Creamos un mapa sencillo, con la brecha absoluta obtenida entre los resultados de las elecciones parlamentarias y los resultados obtenidos por Chávez en 2012

# creamos una paleta sencilla
library(RColorBrewer)
azules<- colorRampPalette(brewer.pal(5,
                                     "Blues"))
rojos<- colorRampPalette(brewer.pal(5,
                                     "Reds"))

colores<-ifelse(elecciones$gobcha > median(elecciones$gobcha),
                azules(1), rojos(1))

Esta paleta básica nos permitirá resaltar las diferentes áreas del mapa, de acuerdo con los resultados obtenidos; si la brecha por estado es inferiores a la mediana, el estado tendrá un color azul grisáceo; si es superior, un color anaranjado bastante discreto a la mediana de la brecha en los resultados de las dos elecciones. Inspeccionemos como nos quedaría la aplicación de esta paleta básica, creando el gráfico de barra con la misma data con la que haremos el mapa temático:

barplot(elecciones$gobcha, col=colores,
        border="white", 
        names.arg = abbreviate(elecciones$NAME_1, 6,
                               method="both"),las=2)

Creamos el mapa

plot(ven1,  col=colores, main="Elecciones 2012, segun brecha absoluta\n en los resultados presidenciales/regionales")
legend("top",legend=c("> Mediana", "< Mediana"), 
       ncol=2, bty="n", pch=15, col=c(rojos(1), azules(1)))

Otra forma de crear este mapa para enriquecer la visualización es crear quintiles.Podemos hacer esto en forma manual, pero tenemos un paquete,ClassInt, que nos facilita el trabajo:

# creamos los quintiles a partir de la data
quintiles <-classIntervals(elecciones$gobcha, 
                         n = 5, style = "quantile")

# integramos los intervalos encontrados con colores deseados
grises <-colorRampPalette(brewer.pal(5,
                                     "Greys"))
brechas <- findColours(quintiles, azules(4))

Creamos ahora el mapa

plot(ven1, col =brechas, border=grises(1))

legend("topleft", fill = attr(brechas, "palette"),
       legend = names(attr(brechas, "table")), bty = "n")

Seguramente este mapa se leerá mejor si revertimos el orden de los colores, de forma tal que lo valores más altos correspondan a colores más oscuros.

La brecha en los resultados entre las elecciones presidenciales y parlamentarias de 2012 es fue menor en Amazonas, Táchira y Delta Amacuro; Bastante alta en la zona norte costera, Zulia y Bolívar. En general, y dado que en el mapa predominan colores azules de tonos medios a altos, observamos que la brecha tendió a ser predominantemente alta en la mayoría de los Estados.

Podemos emplear otros métodos del paquete ClassInt para, dependiendo de los objetivos de nuestra investigación, crear las clases en nuestro mapa temático. Exploraremos esas otras posibilidades en un próximo ejercicio.