【问题标题】:How can I 'close' a geom_path plotted from a polygon shapefile?如何“关闭”从多边形 shapefile 绘制的 geom_path?
【发布时间】:2013-09-24 08:26:50
【问题描述】:

我有一个我只想绘制一部分的 shapefile(多边形),所以使用 ggplot 的 geom_path 我用 xlim 和 ylim 限制可见路径。 Shapefile 是available here (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

看起来像这样:

我想要的是这样的封闭路径(用 gimp 完成):

我可以用 ggplot 命令做到这一点吗?还是 R 中的其他内容?

作为参考,完整的多边形如下所示:

【问题讨论】:

    标签: r ggplot2


    【解决方案1】:

    您可以使用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
    

    【讨论】:

    • 无需摆弄它 - 你的第一个版本更好,因为它为我的工作提供了更好的基础。您的编辑看起来有点损坏。我想理想情况下,人们会想要一种方法来区分原始多边形路径和添加的边界框类型路径。
    • 你知道我不小心没有复制 fortify 语句,并且有p &lt;- ggplot(res, ...),并且代码仍然有效吗?我猜gIntersection 返回了一个合适的对象,但是如何呢?直到看到这个我才知道如何“即时”创建 SpatialPolygon。感谢您提供漂亮的代码。
    • SpatialPolygons 对象必须有隐式转换。 res 没有 STATE_NAME 列,但 fortify 仍然有效;)
    猜你喜欢
    • 2013-04-04
    • 2013-01-24
    • 2017-04-20
    • 1970-01-01
    • 2015-08-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-08
    相关资源
    最近更新 更多