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

如何阻止igraph从邻接矩阵生成重复顶点?

问题原因与解决方法
  • 核心问题:你用错了igraph的图生成函数。graph_from_incidence_matrix是用来创建二分图的——它会把矩阵的行和列分别当成两个独立的节点集合,所以67行+67列就生成了134个顶点,这就是重复顶点的来源。而你的数据是邻接矩阵(描述同一类节点间的关系),应该用graph_from_adjacency_matrix函数。

  • 修正步骤:

    1. 替换图生成函数:把graph_from_incidence_matrix换成graph_from_adjacency_matrix,并设置正确的参数适配无向带权邻接矩阵。
    2. 修正绘图参数:注意igraph里顶点形状的参数是vertex.shape(单数),不是vertex.shapes;另外clan变量要确保来自bbnnames的对应列(比如bbnnames$clan),否则会报错。
  • 修正后的代码:

network_data <- read.csv('bbnmatrix2.csv', header=T, row.names=1, as.is=T)
bbnnames <- read.csv("bbnnames.csv", header=T, as.is=T)

# 用邻接矩阵生成无向带权图
net2 <- graph_from_adjacency_matrix(as.matrix(network_data), 
                                    mode = "undirected",
                                    weighted = TRUE,
                                    diag = FALSE) # 如果邻接矩阵对角线是自环,不需要的话设为FALSE

# 计算度中心性作为顶点大小
vertex_size <- degree(net2) * 0.5 # 乘以系数调整大小,按需修改

# 绘图
plot(net2, 
     vertex.label.color = "black", 
     vertex.label = bbnnames$name,
     vertex.label.cex = 0.5, 
     edge.color = "black",
     vertex.color = bbnnames$clan, # 假设clan是bbnnames里的列
     edge.width = E(net2)$weight * 1.5, # 调整边宽系数
     vertex.shape = bbnnames$status,
     vertex.size = vertex_size) # 用度中心性作为顶点大小
  • 额外说明:
    • 读取邻接矩阵后,建议转成矩阵格式(as.matrix(network_data)),避免graph_from_adjacency_matrix处理数据时出错。
    • 如果你的邻接矩阵包含自环(对角线非0),可以保留diag=TRUE,否则设为FALSE去掉自环。
    • 顶点大小和边宽的系数(比如*0.5、*1.5)可以根据可视化效果自行调整。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 15:12:44