【问题标题】:How do I find the area of voronoi cells within a given region in R?如何在 R 中的给定区域内找到 voronoi 细胞的面积?
【发布时间】:2021-05-08 23:12:07
【问题描述】:

假设我有以下数据:

mydf <- data.frame("x_coords"=c(17,51,28,34,12), "y_coords"=c(5,19,21,6,50))

我想从这些数据点创建一个 voronoi 图,并进一步检索每个单元格的坐标信息。从 CRAN 上的 ggvoronoi 包中,我调用了以下函数:

vor_spdf <- voronoi_polygon(data=mydf ,x="x_coords",y="y_coords")
vor_df <- fortify_voronoi(vor_spdf)

现在,vor_df 为我提供了每个单元格区域的坐标。在下面的 voronoi 图的图像中,假设我想找到每个 voronoi 细胞对封装在红色矩形内的区域的贡献。

总之,我想找到我表示为 1、2 和 3 的区域的面积。我将如何在 R 中执行此操作?

【问题讨论】:

    标签: r geometry 2d spatial voronoi


    【解决方案1】:

    ggvoronoi 具有将生成的单元格绑定到指定区域的功能:

    mydf <- data.frame("x_coords"=c(17,51,28,34,12), "y_coords"=c(5,19,21,6,50))
    vor_spdf <- voronoi_polygon(data=mydf ,x="x_coords",y="y_coords")
    vor_df <- fortify_voronoi(vor_spdf)
    
    rect = data.frame(x=c(14,32,32,14,14), y=c(7,7,27,27,7))
    
    vor_spdf2 <- voronoi_polygon(data=mydf ,x="x_coords",y="y_coords", outline=rect)
    vor_df2 <- fortify_voronoi(vor_spdf2)
    

    然后您可以使用sf 获取这些裁剪后的单元格的位置(有关详细信息,请参阅this):

    mp_sf <- st_as_sf(vor_spdf2)
    p_sf <- st_cast(mp_sf, "POLYGON")
    area <- st_area(p_sf)
    

    ,并绘制它们:

    ggplot() +
      geom_path(data=vor_df, aes(x=x,y=y,group=group))+
      geom_polygon(data=vor_df2, aes(x=x, y=y,group=group,fill=id))+
      geom_path(data=rect, aes(x=x, y=y))+
      geom_point(data=mydf, aes(x=x_coords,y=y_coords))+
      geom_text(data=vor_spdf2@data, aes(x=x_coords, y=y_coords, label=area), nudge_y = -2)
    

    【讨论】:

      猜你喜欢
      • 2013-11-07
      • 1970-01-01
      • 1970-01-01
      • 2017-05-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多