绘制 SHP 文件 R

Plotting SHP file R

我正在尝试读取和绘制来自阿根廷的 shp 文件以创建自定义等值线。我完全按照所有代码示例来加载和绘制这张地图,但没有任何效果。

R 红色标志一直亮着,因为 R 仍在处理信息,但从不绘制任何内容或停止工作。

这是我 运行 "plot" 然后说 Rstudio 停止工作时的屏幕。知道为什么它不能工作吗?

据我所知,使用 maptools 读取 shp 是可行的,但它的支持是有限的。您是否尝试过使用 rgdal::readOGR(dir, layer) 阅读它?

环境 window 显示您有一个 'Large' 对象,但它有多大?如果形状是国界或国界应该没有问题,但如果你有所有的道路或国家的所有街区的形状,事情就会改变。

尝试使用单元测试:尝试绘制国际边界或国家边界。如果你能做到这一点,问题就是形状的大小。

PD:重新启动您的计算机并重试,如果 Rstudio 是唯一的程序,它可能会有所帮助 运行。

首先,ggplot2 似乎能够很好地处理这个问题:

library(rgdal)
library(ggplot2)

arg_shp <- readOGR("../data/arg_adm/ARG_adm1.shp", "ARG_adm1")

arg_shp_map <- fortify(arg_shp)

gg <- ggplot() 
gg <- gg + geom_map(data=arg_shp_map, map=arg_shp_map, 
                    aes(long, lat, map_id=id),
                    color="#2b2b2b", size=0.15, fill=NA)
gg <- gg + coord_map()
gg <- gg + ggthemes::theme_map()
gg

由于您使用的是 GADM 文件,因此您实际上并不需要使用外部 shapefile,只需使用 getData():

library(maptools)
library(raster)

arg_adm <- getData('GADM', country='ARG', level=1)
arg_adm_map <- fortify(arg_adm)

(与上面相同的 ggplot2 代码有效,只是将变量名分出来)。

我也无法使用基本绘图系统来绘制它(在任何图形设备上)。我认为部分海岸线有一些复杂的多边形。我们可以很容易地处理这个问题:

library(maptools)
library(raster)
library(rgeos)
library(magrittr)
library(sp)

arg_adm <- getData('GADM', country='ARG', level=1)

gSimplify(arg_adm, 0.01, topologyPreserve=TRUE) %>% 
  SpatialPolygonsDataFrame(dat=arg_adm@data) -> new_arg

plot(new_arg, lwd=0.25)

(底图默认边距及其处理投影的方式导致了不同大小的地图)

除非您需要边界精度,否则像这样简化 shapefile 可以节省大量绘图时间。您也可以使用 ggplot2 中的优化形状,以及阿根廷定制的地图投影:

new_arg_map <- fortify(new_arg)

gg <- ggplot() 
gg <- gg + geom_map(data=new_arg_map, map=new_arg_map, 
                    aes(long, lat, map_id=id),
                    color="#2b2b2b", size=0.15, fill=NA)
gg <- gg + ggalt::coord_proj("+proj=aeqd +lat_0=-37.869859624840764 +lon_0=-66.533203125")
gg <- gg + ggthemes::theme_map()
gg

(不过,coord_map() 的默认墨卡托投影 pbly gd 足以满足大多数用途)