如何为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
相关产品推荐
相关产品推荐

