绘制 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 足以满足大多数用途)
我正在尝试读取和绘制来自阿根廷的 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 足以满足大多数用途)