En esta publicación, quiero demostrar cómo las ubicaciones espaciales se pueden trazar en mosaicos de mapas usando el paquete ggplot2 en R.
Para ello, primero cargamos los paquetes relevantes. Además, definimos una función de geocodificación utilizando la API de Open Street Map. La función de codificación geográfica se obtuvo de https://datascienceplus.com/osm-nominatim-with-r-getting-locations-geo-coordinates-by-its-address/.
En el siguiente paso, utilizando la función map_data del paquete ggplot2, recopilamos un mapa en forma de un marco de datos adecuado para trazar. Luego también creamos una lista de nombres de ciudades manualmente y convertimos estos nombres de ciudades en coordenadas usando la función de codificación geográfica.
Usando ggplot2 y ggplot2, los puntos de datos geocodificados se visualizan en un mapa mundial.
# importar bibliotecas relevantes
library(ggplot2)
library(ggrepel)
# osm geocodificador
osm_geocoder <- function(address = NULL)
{
if(suppressWarnings(is.null(address)))
return(data.frame())
tryCatch(
d <- jsonlite::fromJSON(
gsub('\\@addr\\@', gsub('\\s+', '\\%20', address),
'http://nominatim.openstreetmap.org/search/@addr@?format=json&addressdetails=0&limit=1')
), error = function(c) return(data.frame())
)
if(length(d) == 0)
return(data.frame())
return(data.frame(lon = as.numeric(d$lon), lat = as.numeric(d$lat)))
}
# parte central
# preparación de datos
world <- map_data("world")
points_df <- data.frame(matrix(nrow=0,ncol=2))
colnames(points_df) <- c("long","lat")
city_list <- c("New York City, New York, USA",
"Detroit, Michigan, USA",
"Atlanta, Georgia, USA",
"Birmingham, Alabama, USA",
"Miami, Florida, USA",
"Nashville, Tennessee, USA",
"Knoxville, Tennessee, USA")
for(i in city_list){
dum_coord <- osm_geocoder(i)
points_df <- rbind(points_df,data.frame("long"=c(as.numeric(dum_coord[1])),"lat"=c(as.numeric(dum_coord[2]))))
}
gg_1 <- ggplot(world) +
geom_polygon(mapping=aes(x=long,y=lat, group=group),fill="white",colour="black")
gg_dots <- gg_1 + geom_point(data=points_df,mapping=aes(x=long, y=lat),colour="red",size=3)
gg_text <- gg_dots + geom_text_repel(data=data.frame("long"=points_df$long,"lat"=points_df$lat,"city"=city_list),
mapping=aes(x=long,y=lat,label=c("New York",
"Detroit",
"Atlanta",
"Birmingham",
"Miami",
"Nashville",
"Knoxville")),
color="blue",
size=6)
# salida de la trama
gg_text
Si esta publicación le pareció interesante, es posible que desee consultar las otras entradas de mi blog sobre visualización de datos espaciales en R, utilizando paquetes como deckgl, ggmap y Leaflet.
Ingeniero industrial especializado en optimización y simulación (R, Python, SQL, VBA)
Leave a Reply