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

如何在igraph中将节点列表转换为边列表(凸包绘图场景)

在igraph中将凸包节点列表转换为边列表并绘制图形

你手头有个空图,需要基于带内部顶点的凸包完成绘制,目前尝试的代码如下:

library(igraph)
set.seed(45)
n = 10

g <- graph.empty(n)
xy      <- cbind(runif(n), runif(n))
    
vp <- convex_hull(xy)$resverts + 1
#[1]  8 10  7  2  1

## convert node_list to edge_list

plot(g, layout=xy)

解决方法

要把凸包的节点列表vp转成能添加到igraph的边列表,关键是让凸包节点首尾相连形成闭合多边形:

  • 先生成闭合的边对:把vp里的每个节点和下一个节点配对,最后一个节点再和第一个节点接上,形成闭环
  • 用add_edges()把这些边添加到空图里

修改后的完整代码:

library(igraph)
set.seed(45)
n = 10

g <- graph.empty(n)
xy      <- cbind(runif(n), runif(n))
    
vp <- convex_hull(xy)$resverts + 1
#[1]  8 10  7  2  1

# 把节点列表转成闭合边序列
edges <- c(rbind(vp, c(tail(vp, -1), vp[1])))
# 给空图添加边
g <- add_edges(g, edges)

# 绘图,可自定义样式突出凸包
plot(g, layout=xy, edge.color="red", vertex.size=10)

简单解释下:

  • rbind(vp, c(tail(vp, -1), vp[1])) 生成了两两对应的节点对:比如vp是[8,10,7,2,1],第二行就是[10,7,2,1,8],合并后就是8-10,10-7,7-2,2-1,1-8的扁平化边序列
  • add_edges()需要扁平化的边向量,所以用c()把矩阵转成一维向量传入
  • 绘图时可以调整边色、节点大小,让凸包的轮廓更明显

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 20:10:32