使用igraph将几条边同时添加到图形中

时间:2017-01-22 02:54:24

标签: r igraph edges

我想传递一个边缘的矩阵,以便在节点之间形成。边缘是无向的。但是,它没有添加我希望添加的边缘

我的图表看起来像这样

mygraph
IGRAPH U--- 30 11 -- 
+ attr: color (v/c), color (e/c)
+ edges:
[1]  3-- 4  3-- 9  4-- 5  4-- 6  6--10 12--14 15--20 16--21 25--27 25--30 26--29

我现在想要添加这些无向边(m中的边缘水平移动,例如12--13是边缘,9--13是边缘等)。如果边缘重复,则应将其删除,因为它是无向的(意味着23--2020--23相同)。

m
     value L1
[1,]     6  2
[2,]     4  5
[3,]     6  5
[4,]     2  6
[5,]    12 13
[6,]     9 13
[7,]    23 20
[8,]    20 23

当我做的时候

add_edges(mygraph, m)

我得到以下内容(注意,边的总数是正确的,但不是应该有边的节点。例如,12--13不存在,而是形成12--9,这是未在m中指定。似乎add_edges正在垂直添加边缘以制作12--9而不是横向添加12--13

m
IGRAPH U--- 30 19 -- 
+ attr: color (v/c), color (e/c)
+ edges:
[1]  3-- 4  3-- 9  4-- 5  4-- 6  6--10 12--14 15--20 16--21 25--27 25--30 26--29  4-- 6  2-- 6  9--12 20--23  2-- 5  5-- 6 13--13
[19] 20--23

如何使用igraph将边缘从矩阵水平添加到图形?

1 个答案:

答案 0 :(得分:1)

在将边矩阵添加到图形之前需要对其进行转置,原因是矩阵中的数据按列存储,似乎igraph没有为矩阵提供适当的接口,也就是说,它不会将您的矩阵解释为行边缘矩阵而只是一个向量,并将每个相邻对解释为新边缘:

看看这个简单的例子:

library(igraph)
mygraph <- graph(c(1,2,3,4,5,6))
mygraph
IGRAPH D--- 6 3 -- 
+ edges:
[1] 1->2 3->4 5->6

m <- matrix(c(6,2,4,5), byrow = TRUE, ncol = 2)
m
     [,1] [,2]
[1,]    6    2
[2,]    4    5

如果我直接将m添加到图形对象:

add_edges(mygraph, m)
IGRAPH D--- 6 5 -- 
+ edges:
[1] 1->2 3->4 5->6 6->4 2->5

我有6 - &gt; 4和2 - &gt; 5添加为图表,这是因为:

as.vector(m)
# [1] 6 4 2 5

因此相邻节点被解释为边缘。但是如果在将m添加为边缘之前进行转置,则会得到正确的结果。

add_edges(mygraph, t(m))
IGRAPH D--- 6 5 -- 
+ edges:
[1] 1->2 3->4 5->6 6->2 4->5