10.2 Ejemplos

En los ejemplos que siguen se va a utilizar el conjunto de datos crimes que forma parte del paquete ggmap y que incluye información geolocalizada de crímenes cometidos en la ciudad de Houston. En realidad, solo consideraremos los crímenes serios, es decir,

crimes.houston <- subset(crime, ! crime$offense %in% c("auto theft", "theft", "burglary"))

10.2.1 Puntos sobre mapas

El tipo de mapas más simples son los que se limitan a representar puntos sobre una capa cartográfica.

HoustonMap <- qmap("houston", zoom = 14, color = "bw")
HoustonMap +
  geom_point(aes(x = lon, y = lat, colour = offense), data = crimes.houston, size = 1)

En el código anterior hemos usado la función qmap, una función auxiliar que internamente llama primero get_map y luego a ggmap.

Los mecanismos conocidos de ggplot2, como las facetas, están disponibles en ggmap: es posible crear una retícula de mapas usando facet_wrap. En este primer caso, descomponiendo el gráfico anterior por tipo de crimen.

HoustonMap +
  geom_point(aes(x = lon, y = lat), data = crimes.houston, size = 1) + 
  facet_wrap(~ offense)

O, alternativamente, por día de la semana.

HoustonMap +
  geom_point(aes(x = lon, y = lat), data = crimes.houston, size = 1) + 
  facet_wrap(~ day)

Prueba a pintar las gasolineras en el mapa de España (fichero dat/carburantes_20050222.csv).

Baja datos georreferenciados del portal de datos abiertos del ayuntamiento de Madrid y represéntalos sobre un mapa.

10.2.2 Rutas sobre mapas

Vamos a hacer una digresión para representar información geográfica contenida en ficheros .kml usando ggmap como ejemplo de la versatilidad del paquete.

library(maptools)
# un fichero bajado el Ayto. de Madrid
rutas <- getKMLcoordinates("data/130111_vias_ciclistas.kml")

El conjunto de datos anterior contiene una lista de rutas (inspecciónalo), que queremos convertir en una única tabla para poder representarlas gráficamente con ggmap.

library(plyr)
rutas <- ldply(1:length(rutas), function(x) data.frame(rutas[[x]], id = x))
mapa <- get_map("Madrid", source = "stamen", maptype = "toner", zoom = 12)
ggmap(mapa) + geom_path(aes(x = X1, y = X2, group = id), data = rutas, colour = "red")

10.2.3 Más allá de los puntos: densidades y retículas

Además de geom_point, también están disponibles otros tipos de capas de ggplot2, como stat_bin2d, que cuenta el número de eventos que suceden en regiones cuadradas de un tamaño predefinido.

HoustonMap +
  stat_bin2d(
    aes(x = lon, y = lat, colour = offense, fill = offense),
    size = .5, bins = 30, alpha = 1/2,
    data = crimes.houston
  )

O se puede usar stat_density2d, que representa intensidades, para identificar las zonas de mayor criminalidad.

HoustonMap +
  stat_density2d(aes(x = lon, y = lat, fill = ..level.., alpha = ..level..),
                 size = 2, data = crimes.houston,
                 geom = "polygon"
)

Lee este artículo y consulta qué otras cosas (además de puntos) pueden representarse sobre un mapa.