我想传递一个边缘的矩阵,以便在节点之间形成。边缘是无向的。但是,它没有添加我希望添加的边缘
我的图表看起来像这样
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--20
与20--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将边缘从矩阵水平添加到图形?
答案 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