Professional Documents
Culture Documents
Ggplot para Hacer Mapas en R
Ggplot para Hacer Mapas en R
Mapas animados
A veces, mostrar muchos mapas estáticos no comunica tan bien como
hacerlo de una manera animada. El paquete gganimate nos permite
usar prácticamente la misma sintáxis de ggplot para hacer animados
a nuestros mapas. Hagamos uno que muestre los precios de los
inmuebles por año para cada barrio de la Ciudad de Buenos Aires:
library(gganimate)
preciosCABABarrios<-preciosCABABarrios %>%
mutate(PrecioM2Cat = cut(PrecioM2,quantile(PrecioM2),
include.lowest = TRUE))
levels(preciosCABABarrios$PrecioM2Cat) <- c('De 761 a 1661', 'De
1662 a 1973', 'De 1974 a 2319', 'Más de 2320')
scale_color_manual(breaks=c("Europe","Asia","Oceania","Africa","Am
ericas"),
values =
c("#E41A1C","#377EB8","#4DAF4A" ,"#984EA3","#FF7F00")) +
labs(x = "PIB per cápita",
y = "Expectativa de vida al nacer (en años)",
title="Año: {frame_time}",
subtitle="Expectativa de vida al nacer según nivel de
ingreso",
color="Continente",
caption="Fuente: Gapminder") +
transition_time(year) +
ease_aes('linear')
Si lo ejecutan, deberían tener algo similar a lo que se ve abajo:
Aunque para generar esta animación use anim_save(), el equivalente
a ggsave(), pero para animaciones:
anim_save(filename="animacion.gif",
animation = gapminderAnim,
width=2100,
height=1500,
res=300)
dato espacial
Un dato espacial o georreferenciado tiene una característica que lo
hace único: posee información sobre su ubicación en la Tierra. No es
el único tipo de dato que tiene particularidades, por ejemplo las series
de tiempo tienen información sobre un específico período de tiempo
donde se registró la información. Esto trae importantes
consideraciones al momento de realizar el análisis estadístico, lo que
generó el desarrollo de toda una rama de la estadística. No obstante,
los datos espaciales no presentan un desafío solo al momento de su
análisis, sino que presentan específicidades en la forma de
representar su información geográfica y realizar transformaciones en
los datos.
2 Proyecciones
Hasta ahora hemos trabajado en la representación de la Tierra en tres
dimensiones. Sin embargo, todos los mapas con los que hemos
trabajado desde chicos tienen dos dimensiones ¿Cómo
transformamos un objeto de tres dimensiones a uno de dos
dimensiones? Debemos realizar proyecciones de ese objeto
tridimensional que, como veremos en breve, involucra
diversos tradeoffs3. Piensen en la proyección como una tarea de
traducción: algo se pierde en el proceso.
La proyección hoy en día más famosa es MERCATOR, la proyección
que usa, entre otros servicios, Google Maps. Diseñada hace ya varios
siglos para la navegación marítima, esta transformación es
relativamente buena en lo relativo preservar formas y útil para
navegar.
En lo que realmente falla este tipo de proyección es en definir el
tamaño de las unidades geógraficas: los países que están cerca de
los polos aparentan tener un tamaño mucho más grande del que
realmente tienen, mientras que lo inverso sucede con los que están
cerca de la línea del ecuador. Tal es así que existe una página web
(https://thetruesize.com/ ) que permite experimentar de manera
interactiva con los tamaños de los países en diversas partes de la
proyección. En la Figura 1 muestro un ejemplo: Groenlandia, Islandia,
Noruega, Suecia, Finlandia y Reino Unido combinadas ocupan
aproximadamente el 50% de Brasil (Figura 1).
Figure 4.1: La proyección MERCATOR distorsiona nuestra percepción
de los tamaños
La oferta de proyecciones es prácticamente ilimitada. El
paquete mapproj en R nos permite transformar el mundo en base a
diversas proyecciones, incluyendo algunas que preservan el tamaño
de los países. La Figura 2 muestra el mundo desde otra perspectiva:
los países del norte son más chicos de lo que parecen en la
proyección mercator.
mutate(CABA=ifelse(is.na(BARRIO),TRUE,FALSE))
# Chequeo para ver si lo hicimos bien
table(datosPreciosBarrios$CABA)
##
## FALSE TRUE
## 18610 43461
Listo, ahora ya podemos hacer nuestros gráficos usando tmaps o
ggplot. Recuerden usar library() o require() para poder trabajar con
sus funciones. Además, vamos a usar RColorBrewer, una libreria para
usar diferentes paletas de colores. Todo esto está explicado en el
capítulo 3 de este libro.
library(tmap)
library(ggplot2)
library(RColorBrewer)
# Gráfico usando tmaps
tm_shape(barrios) +
tm_polygons(col = 'white', border.col = "black") +
tm_shape(datosPreciosBarrios) + tm_dots(col =
'CABA',palette=brewer.pal(n = 2,name = "Set1"))
# Gráfico usando ggplot
ggplot() +
geom_sf(data=barrios, fill=NA) +
geom_sf(data = datosPreciosBarrios, mapping =
aes(color=CABA),size=0.1, show.legend = FALSE) +
coord_sf(xlim = c(90000, 110000), ylim = c(92000,113000),datum =
NA) +
scale_color_brewer(palette = "Set1") +
theme_minimal()
Todo parece haber funcionado bien. Con el
dataset datosPreciosBarrios (e incorporando datos sobre otros años)
podemos ejecutar los códigos que vimos en la clase pasada y lograr al
dataset que analizamos durante nuestra primera clase: ya están en
condiciones de descargar datos espaciales de distintas fuentes y
combinarlos !
mutate(CERCA=ifelse(is.na(ESTACION),FALSE,TRUE))
ggplot() +
geom_sf(data = barrios) +
geom_sf(data = datosPreciosBarrios, size=0.5, aes(color=CERCA))
El gráfico es el mismo que en la subsección anterior.