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)
## Warning in file.remove(index[[url]]): cannot remove file
## 'e3c467b2fdd957a017fabe14098221ef.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## 'e2a39c53f4fcf9408651005ebc0ef756.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## 'a4df2b470a4046607a58930ff453525d.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## 'e4bfb802b783a4d5ebcb29993d974e92.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## '511baaceddfd5cf49a723b7be55cafc3.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## 'b6551e145482b2ac61e3a01b068370e8.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## 'a698c60678d0d6417f1b1133000d0c02.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## '06a68e4a901cf22a02759a14348659a8.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## '46d3f002d30366079037c6eacbdc8199.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## 'd1224be0602c3e4ffda8c971c2a95eab.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## '5c300740b871af3a32dc3c27564e4052.rds', reason 'No such file or directory'
## Warning in file.remove(index[[url]]): cannot remove file
## '231fdeaa4211fa802000ac0b16439cba.rds', reason 'No such file or directory'
ggmap(mapa) + geom_path(aes(x = X1, y = X2, group = id), data = rutas, colour = "red")
## Warning: Removed 814 rows containing missing values (geom_path).

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.