从邻接矩阵开始时如何添加顶点/节点信息?

时间:2017-07-26 22:22:39

标签: r igraph

这看起来很简单,但我无法弄清楚。 我创建了一个邻接矩阵,指定哪个节点连接到哪个节点,这是一个有向图。

  A B C D
A 0 1 0 1
B 0 0 0 0 
C 1 0 0 0 
D 1 0 1 0

我可以把它读成igraph graph_from_adjacency_matrix(matrix)

我还有一个数据框,其中包含每个节点的规范 f.i。

data.frame(id = c("A", "B","C","D"), 
           color = c("red","red", "green","deathmetal black"), 
           shoesize = c(31,32,33,50))

如何将这些信息合并到1个图表中以进行绘图?

2 个答案:

答案 0 :(得分:2)

您可以将节点属性值与set_vertex_attr

合并

如果你有

matrix <- structure(c(0L, 0L, 1L, 1L, 1L, 0L, 0L, 0L, 0L, 0L, 0L, 1L, 1L, 
0L, 0L, 0L), .Dim = c(4L, 4L), .Dimnames = list(c("A", "B", "C", 
"D"), c("A", "B", "C", "D")))
gg <- graph_from_adjacency_matrix(matrix)

然后你可以做

data.frame(id = c("A", "B","C","D"), 
           color = c("red", "red", "green", "deathmetal black"), 
           shoesize = c(31,32,33,50), stringsAsFactors=FALSE)
gg <- set_vertex_attr(gg, "color", dd$id, dd$color)
gg <- set_vertex_attr(gg, "shoesize", dd$id, dd$shoesize)

答案 1 :(得分:2)

稍微不同的方法是使用tidygraph包:

as_tbl_graph(matrix) %>% left_join(data, by=c('name'='id'))

根据Thomas Lin Pederson(tidygraph的创造者)的说法。