10 Introducción a ggmap
Con ggplot2
pueden construirse muchos tipos de gráficos de interés estadístico. Pero sus autores quisieron trasladar la arquitectura del paquete a otro ámbito: el de la representación de información georreferenciada. ggplot2
permite representar información geográfica (puntos, segmentos, etc.): basta con que las estéticas x
e y
se correspondan con la longitud y la latitud de los datos. Lo que permite hacer ggmap
es, en esencia, añadir a los gráficos ya conocidos una capa cartográfica adicional. Para eso usa recursos disponibles en la web a través de APIs (de Google y otros).
Un ejemplo sencillo ilustra los usos de ggmap
. En primer lugar, se carga (si se ha instalado previamente) el paquete:
library(ggmap)
Existen varios proveedores que proporcionan APIs de geolocalización. Uno de ellos es Google: dado el nombre más o menos normalizado de un lugar, la API de Google devuelve sus coordenadas. Este servicio tiene una versión gratuita que permite realizar un determinado número de consultas diarias (2500 actualmente); para usos más intensivos, es necesario adquirir una licencia. La función geocode
encapsula la consulta a dicha API y devuelve un objeto (un data.frame
) que contiene las coordenadas del lugar de interés:
unizar <- geocode('Calle de Pedro Cerbuna 12, Zaragoza, España',
source = "google")
La función get_map
consulta otro servicio de información cartográfica (GoogleMaps en el ejemplo siguiente) y descarga un mapa (que es, esencialmente, una imagen raster). La función exige una serie de argumentos: el nivel de zoom, si se quiere un mapa de carreteras o del terreno, etc. Son, de hecho, los parámetros que uno puede manipular con los controles de la interfaz habitual de GoogleMaps.
map.unizar <- get_map(location = as.numeric(unizar),
color = "color",
maptype = "roadmap",
scale = 2,
zoom = 16)
Es obvio que para poder invocar las dos funciones anteriores hace falta una conexión a internet. Sin embargo, el resto de las operaciones que se van a realizar se ejecutan localmente. Se puede, por ejemplo, representar el mapa directamente (haciendo ggmap(map.unizar)
). O bien se puede marcar sobre él el punto de interés:
ggmap(map.unizar) + geom_point(aes(x = lon, y = lat),
data = unizar, colour = 'red',
size = 4)
Como veremos a continuación, no estamos limitados a representar un único punto: unizar
podría ser una tabla con más de una fila y todos los puntos se representarían sobr el mapa.
Como puede apreciarse, la sintaxis es similar a la de ggplot2
. Una diferencia notables que, ahora, los datos se pasan en la capa, es decir, en este caso, en la función geom_point
.