Igraph使用mark.groups报未知顶点错误 社区绘图节点属性失效
问题原因
mark.groups报错的核心是索引不匹配:你认知中的顶点编号和graph_deu对象实际的顶点索引不一致,该问题常见于图对象经过节点筛选、子图提取等操作后,原有编号未同步更新导致的匹配失效。- 绘制社区对象时自定义着色失效:igraph对社区对象的
plot方法默认会强制使用社区分类作为节点颜色,你传入的vertex.color参数会被默认逻辑覆盖。
解决方案
以下两种方案二选一即可实现需求:
方案1:修复mark.groups写法,直接绘制igraph对象
将分组索引改为从当前图对象中直接提取顶点,彻底避免索引不匹配问题:
set.seed(2) # 从当前图对象直接提取顶点生成分组,匹配度100% group_list <- list( V(graph_deu)[c(33,1,34,2,36,53,54,56,42,43,55,57,18)], V(graph_deu)[c(35,48,50,27)], V(graph_deu)[c(38,45,46,47,49,28,25)] ) plot(graph_deu, mark.groups = group_list, mark.col = c("lemonchiffon", "slategray1", "thistle1"), mark.border = NA, edge.width = E(graph_deu)$weight, vertex.size = deu_deg, vertex.color = deu, vertex.shape = topic_type, vertex.label = node_labels, vertex.label.cex = 1.5 )
方案2:基于社区对象绘制,禁用默认着色
如果mod2就是你需要的社区划分结果,只需在绘图参数中添加col = NULL禁用默认的社区着色逻辑,自定义的节点颜色即可生效:
set.seed(2) plot(mod2, graph_deu, col = NULL, # 关键参数:禁用默认社区着色 mark.col = c("lemonchiffon", "slategray1", "thistle1"), mark.border = NA, edge.width = E(graph_deu)$weight, vertex.size = deu_deg, vertex.color = deu, vertex.shape = topic_type, vertex.label = node_labels, vertex.label.cex = 1.5 )
内容的提问来源于stack exchange,提问作者srrein
相关产品推荐
相关产品推荐

