使用geom_polygon绘制带孔的ggplot多边形

时间:2016-06-06 13:32:27

标签: r plot ggplot2 sp

questions的事实ggplot2无法绘制具有的多边形形状。

这是因为,如果点的顺序不正确,则结束图看起来很糟糕,通常在圆环形状内有剪切/修剪线。

我已经阅读了很多关于订单如何重要的内容,但我无法前进。 我有一个SpatialPolygonsDataFrame有26个功能(来自raster::rasterToPolygons(dissolve=T)),我想用ggplot绘制它。

这里发生了什么 -

r3.pol <- rasterToPolygons(r3, dissolve=T)
r3.df <- fortify(r3.pol)
names(r3.df) <- c('x','y','order','hole','piece','ID','group')
p <- ggplot(r3.df)
p <- p + geom_polygon(mapping=aes(x=x,y=y,group=ID), fill='red')
p <- p + coord_equal()

我看到了这个输出:

enter image description here

虽然它应该是这样的,plot(r3.pol)

enter image description here

我该如何使这项工作? 我试了几个小时,但我无法重新排序r3.df。 此外,r3.df$hole中的信息可以提供帮助吗?函数fortify返回的是孔(我认为)。

附带问题:我怎样才能给你我的r3.pol SpatialPolygonsDataFrame,以便你自己试试?我记得看到过长而可重复的转储&#34;对象在这里,但我不知道该怎么做。

save d多边形数据框here。抱歉,无法使用dput保存它。您可以使用load获取它。

2 个答案:

答案 0 :(得分:3)

我建议安装软件包“ggpolypath”并使用geom_polypath而不是geom_polygon。适合我。

答案 1 :(得分:2)

我的临时解决方案是:@#$%多边形,并使用raster包。

即:

r <- raster(x=extent(r3.pol), crs=crs(r3.pol)) # empty raster from r3.pol
res(r) <- 250 # set a decent resolution (depends on your extent)
r <- setValues(r, 1) # fill r with ones
r <- mask(r, r3.pol) # clip r with the shape polygons

现在就像使用raster的任何ggplot一样绘制它。 rasterVis包可能在这里有用,但我没有使用它,所以:

rdf <- data.frame(rasterToPoints(r))
p <- ggplot(rdf) + geom_raster(mapping=aes(x=x, y=y), fill='red')
p <- p + coord_equal()

就在这里。

enter image description here

或者,您可以使用rasterize创建栅格,因此栅格将保存多边形值(在我的情况下,只是一个整数):

r <- raster(x=extent(r3.pol), crs=crs(r3.pol))
res(r) <- 250
r <- rasterize(r3.pol, r)

rdf <- data.frame(rasterToPoints(r))
p <- ggplot(rdf) + geom_raster(mapping=aes(x=x, y=y, fill=factor(layer)))
p <- p + coord_equal()

enter image description here

如果有人为geom_polygon提出了一个不错的解决方案,可能涉及重新排序多边形数据框,我很乐意考虑它。