使用ggplot2在R中绘制图

在本文中,我想演示如何使用R中的ggplot2包将空间位置绘制到地图图块上。

为此,我们首先加载相关的软件包。此外,我们使用Open Street Map API定义了一个地理编码功能。地理编码功能是从https://datascienceplus.com/osm-nominatim-with-r-getting-locations-geo-coordinates-by-its-address/获得的

下一步,使用ggplot2包中的map_data函数,以适合绘制的数据框形式收集地图。然后,我们还手动创建城市名称列表,并使用地理编码功能将这些城市名称转换为坐标。

然后,使用ggplot2和ggplot2将地理编码的数据点显示在世界地图上。

#导入相关库
library(ggplot2)
library(ggrepel)

#osm地理编码器
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)))
}

#核心部分
#数据准备
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

如果您发现这篇文章很有趣,那么您可能想使用deckgl,ggmap和Leaflet之类的软件包查看我有关R中空间数据可视化的其他博客条目。

Leave a Reply

发表评论

您的电子邮箱地址不会被公开。

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据

Close

功能