我在做一个ggplot的面具。如何在不使用GIS程序的情况下删除在ggplot
上绘制的圆内的区域?我有一个data.frame
,用于在图和圆上制作边界框,如下所示:
library(ggplot2)
bndBox <- data.frame(x=c(-Inf,Inf,Inf,-Inf),
y=c(Inf,Inf,-Inf,-Inf),
id="bnd")
hole <- data.frame(
x = cos(seq(0, 2*pi, length.out = 360)),
y = sin(seq(0, 2*pi, length.out = 360)),
id="circle"
)
porthole <- rbind(bndBox,hole)
ggplot() +
# I want to be able to see this point
geom_point(aes(x = 0,y = 0)) +
# But not this point
geom_point(aes(x = -1,y = 0)) +
geom_polygon(data=porthole,
aes(x = x, y = y, fill = id),
inherit.aes = FALSE)
2条答案
按热度按时间yftpprvb1#
更新了答案,以考虑顺时针方向前进的闭合多边形会形成一个孔。
创建于2023-06-15带有reprex v2.0.2
gfttwv5a2#
我可以用
sf
做我想做的事情,但我希望不要走这条路,因为我发现代码很难理解,并且觉得geom_polygon()应该能够处理它。下面是一个繁琐的解决方案: