R缓冲/放大多边形

R缓冲/放大多边形,r,R,我有一个简单的多边形 dfr <- data.frame(x=c(2,2.5,4,5,4.5,3,2),y=c(2,3,3.5,3,2.8,2.5,2)) plot(dfr) polygon(dfr) dfr使用sf软件包,您可以将多边形转换为空间对象并使用st_buffer: > p = st_polygon(list(as.matrix(dfr))) > pbuf = st_buffer(p, .4) > plot(pbuf) > plot(p,add=TRU

我有一个简单的多边形

dfr <- data.frame(x=c(2,2.5,4,5,4.5,3,2),y=c(2,3,3.5,3,2.8,2.5,2))
plot(dfr)
polygon(dfr)

dfr使用
sf
软件包,您可以将多边形转换为空间对象并使用
st_buffer

> p = st_polygon(list(as.matrix(dfr)))
> pbuf = st_buffer(p, .4)
> plot(pbuf)
> plot(p,add=TRUE,col="red")
> 

出于纯粹的绘图目的,我找到了这个解决方案

library(ggplot2)
dfr <- data.frame(x=c(2,2.5,4,5,4.5,3,2),y=c(2,3,3.5,3,2.8,2.5,2))

# vanilla polygon
ggplot(dfr,aes(x,y))+
  geom_polygon(fill=NA,col="black")+
  theme_minimal()


请注意,CRAN上的
ggforce 0.1.3
版本还没有此功能。上的版本具有此功能。

我不希望使用大型GIS包作为依赖项。但是,我想这是可行的。也许我可以把这个函数拆开。实际上,应该有一个简单的几何图形包可以处理基本的R对象。任何简单的几何图形包都将扩展到包含GIS:)
# enlarge polygon
library(ggforce)
ggplot(dfr,aes(x,y))+
  geom_polygon(fill=NA,col="black")+
  geom_shape(fill=NA,col="red",expand=unit(0.2,"cm"))+
  theme_minimal()
# enlarge with pretty curved edges
library(ggforce)
ggplot(dfr,aes(x,y))+
  geom_polygon(fill=NA,col="black")+
  geom_shape(fill=NA,col="red",expand=unit(0.2,"cm"),radius=unit(0.2,"cm"))+
  theme_minimal()