如何在R中基于邻接矩阵绘制指定样式的无向连通图?
基于邻接矩阵在R中绘制指定无向连通图的解决方案
你的邻接矩阵定义正确,但igraph默认使用环形布局(layout_in_circle),所以会生成环形图。要得到和附件一致的布局,可通过以下两种方法调整:
方法1:使用自动布局算法
选择更贴合节点连接关系的布局算法,比如layout_with_graphopt,它会根据边的连接自动优化节点位置,避免环形排列:
# 定义邻接矩阵 data <- matrix(c(0,1,0,0,1, 1,0,1,0,0, 0,1,0,1,0, 0,0,1,0,1, 1,0,0,1,0),nrow=5,ncol = 5) colnames(data) = rownames(data) = LETTERS[1:5] # 创建无向图对象(明确指定无向模式) network <- graph_from_adjacency_matrix(data, mode = "undirected") # 使用graphopt布局绘制 plot(network, layout = layout_with_graphopt(network), vertex.size = 20, vertex.label.cex = 1.2)
方法2:手动指定节点坐标
如果需要完全匹配附件的节点位置,直接自定义坐标是最精准的方式。你可以根据附件里的节点位置调整坐标数值:
# 定义邻接矩阵 data <- matrix(c(0,1,0,0,1, 1,0,1,0,0, 0,1,0,1,0, 0,0,1,0,1, 1,0,0,1,0),nrow=5,ncol = 5) colnames(data) = rownames(data) = LETTERS[1:5] # 创建无向图对象 network <- graph_from_adjacency_matrix(data, mode = "undirected") # 自定义节点坐标(示例:A(0,0), B(1,1), C(2,1), D(3,0), E(1,-1)) custom_layout <- matrix(c(0, 1, 2, 3, 1, 0, 1, 1, 0, -1), nrow=5, ncol=2) rownames(custom_layout) <- LETTERS[1:5] # 绘制图形 plot(network, layout = custom_layout, vertex.size = 20, vertex.label.cex = 1.2)
说明
mode = "undirected"明确指定无向图,避免默认设置可能的歧义;- 调整
vertex.size和vertex.label.cex可以优化节点大小和标签字号,让图形更清晰; - 手动坐标时,只需修改
custom_layout中的数值,就能完全复刻附件的节点位置。
内容的提问来源于stack exchange,提问作者Homer Jay Simpson
相关产品推荐
相关产品推荐

