阅读R中的有向图

时间:2012-11-28 12:07:53

标签: r graph path igraph

我无法阅读/创建有向图。我按照我找到的here步骤进行了操作。

这是我的文本文件 graph.txt

1 2
1 3
2 5
3 4
3 5
4 5
5 6
5 10
6 7
7 8
7 9
7 12
8 9
9 10
9 11
9 12
10 11
11 7
11 12

现在我读了 graph.txt

library("igraph")
xlist<-read.graph("graph.txt", format="edgelist")

然后我绘制它:

plot(xlist)

但这不是我读入xlist的图表:

http://i.imgur.com/dubQh.png

如您所见,在1&gt; 2,1-> 3,5-> 10之间没有边缘,依此类推。如何正确阅读有向图?

完成此操作后,如何显示两个节点之间的所有最短路径?

2 个答案:

答案 0 :(得分:6)

这似乎对我很好:

 xlist<-read.table("graph.txt")
 xlist <- graph.data.frame(xlist)
 plot(xlist)

注意R更改节点并将它们从零向上编入索引(而不是在最近的igraph更新中,如下面的@Sacha Epskamp评论)。 使用:

plot(xlist, vertex.label= V(xlist)$name)

您将看到所需的名称。即1到2之间的边缘。

绘制最短路径的一种方法是使用get.all.shortest.paths,然后使用它来对图形进行子集化并将其绘制成过度。有关我绘制生成树的类似示例,请参阅我的answer to this question

答案 1 :(得分:5)

错误的原因是边缘列表文件(即格式"edgelist")将顶点从零开始编号。这在所有igraph版本中都是相同的,即使最近的R igraph包从一个顶点编号。

原因是我们希望R igraph与Python igraph和C igraph一致,就文件格式而言。即由igraph和Python igraph以相同的方式解释由Python igraph编写的文件(在本例中为边缘列表文件)。从零开始的编号是文件格式的属性。

如果你已经有一个边缘列表文件,它开始用一个顶点编号,那不是igraph edgelist文件格式,你需要转换它,只需从每个顶点id中减去一个。

解决方法是使用scan()read.table()读取文件(scan()要快得多,如果你有大文件可能很重要),然后调用{{1直接。在这种情况下,您不需要减去一个,因为在R igraph中,顶点ID从一个编号。