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

如何将Voronoi图最外层多边形设为透明或统一颜色?

移除Voronoi图外层多边形的方案

解决外层多边形残留填充的问题,关键是先识别出超出目标范围的外层Voronoi多边形,再单独设置其填充样式。借助deldir包(ggvoronoi的底层依赖)手动生成并处理多边形数据是最可靠的方式,具体操作如下:

1. 生成Voronoi多边形数据

先用deldir生成完整的Voronoi多边形信息,转换为ggplot兼容的数据框:

require(ggplot2)
require(ggvoronoi)
require(deldir)
set.seed(2023)

N <- 80
x <- runif(N)
y <- runif(N)
df <- data.frame(x, y)
df$dist <- rnorm(N)

# 生成Voronoi多边形
voronoi_data <- deldir(df$x, df$y)
vor_df <- tile.list(voronoi_data)

# 转换为带原始数据dist值的数据集
vor_polygons <- lapply(seq_along(vor_df), function(i) {
  poly <- vor_df[[i]]
  data.frame(
    x = poly$x,
    y = poly$y,
    id = i,
    dist = df$dist[i]
  )
})
vor_polygons <- do.call(rbind, vor_polygons)

2. 标记外层多边形

判断每个多边形是否有顶点超出目标范围(这里是x∈[0.1,0.9]、y∈[0.1,0.9]),这类就是需要处理的外层多边形:

# 筛选外层多边形的ID
outer_ids <- unique(vor_polygons$id[
  vor_polygons$x < 0.1 | vor_polygons$x > 0.9 | 
  vor_polygons$y < 0.1 | vor_polygons$y > 0.9
])

# 给每条多边形顶点添加外层标记
vor_polygons$is_outer <- vor_polygons$id %in% outer_ids

3. 绘制处理后的Voronoi图

分别绘制内层和外层多边形,外层设置为透明或统一颜色:

ggplot() +
  # 内层多边形使用原始填充色
  geom_polygon(data = vor_polygons[!vor_polygons$is_outer, ],
               aes(x = x, y = y, group = id, fill = dist)) +
  # 外层多边形设为透明(可替换为统一颜色,比如"gray90")
  geom_polygon(data = vor_polygons[vor_polygons$is_outer, ],
               aes(x = x, y = y, group = id), fill = "transparent") +
  # 添加Voronoi边界路径
  stat_voronoi(data = df, aes(x = x, y = y), geom = "path") +
  # 设置显示范围
  xlim(0.1, 0.9) +
  ylim(0.1, 0.9) +
  theme_void()

补充说明

  • 仅用xlim/ylim只是裁剪显示区域,但外层多边形的填充会在裁剪边缘残留,而直接识别多边形顶点范围的方法能彻底处理外层。
  • 如果不需要外层多边形,也可以直接过滤掉vor_polygons[!vor_polygons$is_outer, ]数据后绘图,无需单独绘制外层。

内容的提问来源于stack exchange,提问作者p-robot

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 03:16:24