如何“关闭”从面状 shapefile 绘制的 geom_path?

4

我有一个形状文件(多边形),但我只想绘制其中的一部分,因此使用 ggplot 的 geom_path 函数,并通过 xlim 和 ylim 限制可见路径。该形状文件可以在这里(2.5 MB)下载。

library(rgdal)
library(ggplot2)


coast <- readOGR(dsn=".", layer="coast-rgdal")
coast.df <- fortify(coast, region="STATE_NAME")
p <- ggplot(coast.df, aes(x=long, y=lat, group=group)) +
  geom_path(colour="black", size=1/4) +
  xlim(146, 148) + ylim(-39.25, -37.5) + coord_fixed()
p

这是这样的:

Vic coast open

我希望得到一个类似于gimp中的封闭路径的图像:

Vic coast closed

我能用ggplot命令实现吗?还是要使用R中的其他东西?
完整多边形如下所示:

enter image description here

1个回答

3
你可以使用rgeos包中的gIntersection函数来提取这个区域:
library(rgdal)
library(ggplot2)
library(rgeos)

coast <- readOGR(dsn=".", layer="coast-rgdal")

lim <- cbind(c(146, 148, 148, 146, 146),
             c(-39.25, -39.25, -37.5, -37.5, -39.25))
x <- SpatialPolygons(list(Polygons(list(Polygon(lim)), ID="1")))
proj4string(x) <- proj4string(coast)
res <- gIntersection(coast, x)

coast.df <- fortify(res)
p <- ggplot(coast.df, aes(x=long, y=lat, group=group)) +
     geom_path(colour="black", size=1/4) +
     xlim(146, 148) + ylim(-39.25, -37.5) + coord_fixed()
p

R plot


不需要再修改了 - 你的第一个版本更好,因为它为我提供了一个更好的工作基础。你的编辑看起来有点混乱。理想情况下,人们希望能够区分原始多边形路径和添加的边界框类型路径。 - a different ben
你知道吗,我不小心没有复制fortify语句,而是写成了p <- ggplot(res, ...),但代码仍然可以正常工作?我猜gIntersection返回了一个合适的对象,但是为什么呢? 在看到这个代码之前,我也不知道如何“即兴”创建一个SpatialPolygon。感谢这个巧妙的代码。 - a different ben
SpatialPolygons对象应该有一个隐式转换。res没有STATE_NAME列,但是fortify仍然可以工作 ;) - rcs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接