Neste post, quero demonstrar como as localizações espaciais podem ser plotadas em blocos de mapa usando o pacote ggplot2 em R.
Para isso, primeiro carregamos os pacotes relevantes. Além disso, definimos uma função de geocodificação usando a API Open Street Map. A função de geocodificação foi obtida em https://datascienceplus.com/osm-nominatim-with-r-getting-locations-geo-coordinates-by-its-address/ .
Na próxima etapa, usando a função map_data do pacote ggplot2, coletamos um mapa na forma de um dataframe adequado para plotagem. Em seguida, também criamos uma lista de nomes de cidades manualmente e convertemos esses nomes de cidades em coordenadas usando a função de geocodificação.
Usando o ggplot2 e o ggplot2, os pontos de dados geocodificados são visualizados em um mapa-múndi.
# import relevant libraries
library(ggplot2)
library(ggrepel)
# osm geocoder
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)))
}
# core part
# data preparation
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)
# output the plot
gg_text
Se você achou esta postagem interessante, talvez queira conferir minhas outras entradas de blog sobre visualização de dados espaciais em R, usando pacotes como deckgl, ggmap e Leaflet.
Cientista de dados com foco em simulação, otimização e modelagem em R, SQL, VBA e Python
Leave a Reply