我无法阅读/创建有向图。我按照我找到的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的图表:
如您所见,在1&gt; 2,1-> 3,5-> 10之间没有边缘,依此类推。如何正确阅读有向图?
完成此操作后,如何显示两个节点之间的所有最短路径?
答案 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从一个编号。