有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()
我看到了这个输出:
虽然它应该是这样的,plot(r3.pol)
:
我该如何使这项工作?
我试了几个小时,但我无法重新排序r3.df
。
此外,r3.df$hole
中的信息可以提供帮助吗?函数fortify
返回的是孔(我认为)。
附带问题:我怎样才能给你我的r3.pol SpatialPolygonsDataFrame,以便你自己试试?我记得看到过长而可重复的转储&#34;对象在这里,但我不知道该怎么做。
我save
d多边形数据框here。抱歉,无法使用dput
保存它。您可以使用load
获取它。
答案 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()
就在这里。
或者,您可以使用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()
如果有人为geom_polygon
提出了一个不错的解决方案,可能涉及重新排序多边形数据框,我很乐意考虑它。