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

如何为Voronoi泰森多边形分配对应生成点的颜色?(基于meuse数据集)

为泰森多边形匹配对应生成点的zinc值并可视化(meuse数据集)

以下是基于sf和ggplot2包的完整解决方案,实现将meuse点的zinc值关联到对应的泰森多边形,并让两者使用一致的颜色映射:

步骤1:加载依赖包与数据集

library(sf)
library(ggplot2)

# 加载内置的meuse数据集并转换为sf空间对象
data(meuse)
meuse.sf <- st_as_sf(meuse, coords = c("x", "y"), crs = 28992)

步骤2:生成泰森多边形网格

# 基于所有点生成Voronoi(泰森)多边形集合
voronoi_collection <- st_voronoi(st_union(meuse.sf))
# 将集合拆分为单个多边形的sf对象
voronoi.sf <- st_collection_extract(voronoi_collection, "POLYGON") %>% 
  st_sf()

步骤3:匹配多边形与对应点的zinc值

每个泰森多边形唯一包含生成它的原始点,通过空间相交匹配可以准确关联zinc值:

# 找到每个多边形对应的原始点索引,提取zinc值
voronoi.sf$zinc <- meuse.sf$zinc[unlist(st_intersects(voronoi.sf, meuse.sf))]

步骤4:可视化(多边形与点颜色一致)

使用相同的颜色标尺让多边形和点的颜色与zinc值对应:

ggplot() +
  # 绘制泰森多边形,填充色对应zinc值
  geom_sf(data = voronoi.sf, aes(fill = zinc), color = "white", linewidth = 0.2) +
  # 绘制原始点,颜色对应zinc值(与多边形标尺一致)
  geom_sf(data = meuse.sf, aes(color = zinc), size = 3) +
  # 使用一致的颜色渐变标尺
  scale_fill_viridis_c(option = "plasma", name = "Zinc含量") +
  scale_color_viridis_c(option = "plasma", name = "Zinc含量") +
  labs(title = "泰森多边形与生成点的Zinc值匹配") +
  theme_minimal()

关键说明

  • st_intersects用于空间匹配,确保每个多边形关联到正确的生成点,比按顺序匹配更可靠(避免点集顺序变化导致的错误)。
  • 通过共享的zinc变量和相同的颜色标尺,实现多边形与点的颜色完全对应。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 10:17:30