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

