You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ggplot中无需GIS操作给多边形挖洞制作蒙版?

解决ggplot蒙版挖圆形孔洞的问题

要实现圆形区域显示、外部区域隐藏的蒙版效果,不用GIS操作的话,核心是利用ggplot对带孔洞多边形的支持——通过调整多边形顶点的环绕方向,让ggplot识别出内部的圆形是需要挖空的区域,具体步骤如下:

关键修改点

  • 将外边界和圆形孔洞设置为同一个分组,确保ggplot将它们视为一个带孔的多边形
  • 反转圆形孔洞的顶点顺序,使其环绕方向与外边界相反(外边界逆时针,孔洞顺时针,或反之),触发ggplot的孔洞识别机制
  • 将多边形填充色设为与绘图背景一致,实现“遮挡外部、露出孔洞”的蒙版效果

修改后的完整代码

library(ggplot2)

# 定义绘图外边界(逆时针方向)
bndBox <- data.frame(
  x = c(-Inf, Inf, Inf, -Inf),
  y = c(Inf, Inf, -Inf, -Inf),
  group = 1  # 统一分组
)

# 定义圆形孔洞,反转顶点顺序变为顺时针
hole <- data.frame(
  x = rev(cos(seq(0, 2*pi, length.out = 360))),
  y = rev(sin(seq(0, 2*pi, length.out = 360))),
  group = 1  # 与外边界同组
)

# 合并外边界和孔洞数据
porthole <- rbind(bndBox, hole)

ggplot() + 
  # 绘制需要显示/隐藏的点
  geom_point(aes(x = 0, y = 0), size = 3) +
  geom_point(aes(x = -1, y = 0), size = 3) +
  # 绘制带孔洞的蒙版多边形
  geom_polygon(
    data = porthole, 
    aes(x = x, y = y, group = group),
    fill = "white",  # 与背景色一致,实现遮挡
    color = NA       # 隐藏多边形边框
  ) +
  theme_bw()  # 确保背景为白色(若用其他主题需对应调整fill颜色)

效果说明

  • 圆形孔洞内部的点(0,0)会透过孔洞显示出来
  • 圆形外部的点(-1,0)会被白色的蒙版多边形遮挡
  • 无需依赖任何GIS包,纯用ggplot自身的多边形绘制机制实现

内容的提问来源于stack exchange,提问作者user111024

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.19 03:35:22