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

如何用igraph的cluster_edge_betweenness对命名单模矩阵聚类绘图

使用igraph的cluster_edge_betweenness对单模网络聚类并绘图

没问题,我来帮你把这个流程补全并理清楚,这样你就能顺利完成单模网络的边介数聚类和可视化了——先修正你代码里的小问题,再一步步走完整流程:

1. 加载igraph包并构建单模邻接矩阵

首先加载包,然后生成一个示例的10节点单模网络邻接矩阵(你可以直接替换成自己的真实数据):

library("igraph")

# 生成随机0-1邻接矩阵(模拟稀疏单模网络)
adjm <- matrix(sample(0:1, 100, replace=TRUE, prob=c(0.9,0.1)), nc=10)
colnames(adjm) <- LETTERS[1:10]
row.names(adjm) <- LETTERS[1:10]

2. 将邻接矩阵转换为igraph对象

这里要注意参数设置,因为是无向单模网络,所以指定mode="undirected",同时定义边的权重属性:

g <- graph_from_adjacency_matrix(
  adjm, 
  mode = "undirected", 
  weighted = "weight",  # 这里明确边的权重属性名为"weight"
  diag = TRUE,  # 保留自环(如果不需要可以设为FALSE)
  add.colnames = NULL
)

3. 执行Edge Betweenness聚类

你之前的代码里weights参数引用有误——因为创建图时我们把权重属性命名为weight,所以应该调用E(g)$weight,完整聚类代码如下:

# 运行边介数聚类
eb_cluster <- cluster_edge_betweenness(
  g, 
  weights = E(g)$weight,  # 正确引用边权重属性
  directed = FALSE  # 对应无向网络的设置
)

4. 可视化聚类结果

直接用igraph的plot()函数,把聚类结果传入就能自动给不同簇的节点上色,还可以调整样式让图更清晰:

# 绘制带聚类结果的网络
plot(eb_cluster, g, 
     vertex.size = 22,  # 调整节点大小
     vertex.label.cex = 1.3,  # 放大节点标签
     edge.width = E(g)$weight * 4,  # 根据权重调整边的粗细
     main = "单模网络的Edge Betweenness聚类结果")

实用小技巧

  • 可以用membership(eb_cluster)查看每个节点的簇归属,结果是一个命名向量,方便后续分析;
  • 用modularity(eb_cluster)评估聚类的质量,数值越接近1说明簇内连接越紧密、簇间连接越稀疏;
  • 如果你的真实邻接矩阵是加权的(不是0-1矩阵),这个流程完全适用,只需要替换adjm为你的数据即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:40:40