在ggplot中绘制nb对象?

时间:2019-05-26 20:57:56

标签: r ggplot2 geospatial spatial

我想绘制UK的轮廓以及从空间点数据框中生成的nb对象。

问题在于,英国的轮廓绘制需要非常非常长的时间-它一直使我的Rstudio崩溃。例如,这可能需要很长时间才能加载,或者我的Rstudio只是停止响应。

library(raster)    
UK_gadm <- getData("GADM", country="GB", level=0)
    plot(UK_gadm)

所以我求助于solution上的ggplot2,使用以下命令可以在不到一秒钟的时间内获得英国的轮廓:

library(ggplot2)
UK <- map_data(map = "world", region = "UK") # changed map to "world"
    ggplot(data = UK, aes(x = long, y = lat, group = group)) + 
      geom_polygon() +
      coord_map()

现在的问题是,我希望在英国轮廓的背景下绘制nb对象-但是,这似乎只能在以for example为底的R中实现:

plot(orotl.shp, xlim=c(-125, -115), ylim=c(42,47))
plot(orstationc.neighbors.dist, orstationc.loc, add=T, lwd=2, col="blue")

有什么办法可以在ggplot中绘制nb个对象吗?还是有一种方法可以使R绘制UK的轮廓而又不会使基本的R plot函数使计算机崩溃?

1 个答案:

答案 0 :(得分:0)

经过一整夜的努力,设法找到了快速,简单的解决方案。希望这对遇到类似问题的人有所帮助。

仅详细说明目标:针对shapefile绘制邻居对象(nb)。这是为了可视化某些坐标之间的联系。经过一番谷歌搜索,我认为这只能通过基数R的plot函数来完成。但是,问题是正在加载一个国家的shapefile(从官方来源/ gadm下载),它太大了。

要解决此问题,请通过maps包获取一张更通用,更简单的国家地图,将其转换为shapefile,然后将其与邻居对象一起绘制。

代码如下:

library(spdep)

# get your neighbour object from your spatial points df
rest_neighbours <- dnearneigh(rest_spdf,0,1)

library(maps)

# get boundary of UK
UK_map <- sf::st_as_sf(maps::map(database='world',regions='UK', plot = FALSE, fill = TRUE))

# write to shapefile
st_write(UK_map, 'shapefiles/UK.shp')

# henceforth, we can just call the shapefile 
UK <- readOGR('shapefiles/UK.shp')

# plot the boundary and the neighbours
plot(UK)
plot(rest_neighbours, rest_coords, add=T, lwd=2, col="blue")

我没有意识到官方边界文件经常非常详细,这也意味着它们确实很大,我很高兴r的地图包中提供现成的淡化地图版本。 (抱歉,如果您已经知道-我还在学习!)

希望这对其他人有帮助!