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.