Tun*_*yan 5 r graph path igraph
我无法阅读/创建有向图.我按照我在这里找到的步骤进行操作.
这是我的文本文件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
Run Code Online (Sandbox Code Playgroud)
现在我读了这个graph.txt:
library("igraph")
xlist<-read.graph("graph.txt", format="edgelist")
Run Code Online (Sandbox Code Playgroud)
然后我绘制它:
plot(xlist)
Run Code Online (Sandbox Code Playgroud)
但这不是我读入xlist的图表:
如您所见,1-> 2,1-> 3,5-> 10之间没有边缘,依此类推.如何正确阅读有向图?
完成此操作后,如何显示两个节点之间的所有最短路径?
这对我来说似乎很好:
xlist<-read.table("graph.txt")
xlist <- graph.data.frame(xlist)
plot(xlist)
Run Code Online (Sandbox Code Playgroud)
注意R
更改节点并将它们从零向上编入索引(不是在最近的igraph
更新中,如下面的@Sacha Epskamp评论).使用:
plot(xlist, vertex.label= V(xlist)$name)
Run Code Online (Sandbox Code Playgroud)
你会看到你想要的名字.即1到2之间的边缘.
绘制最短路径的一种方法是使用get.all.shortest.paths
,然后使用它来对图形进行子集化并将其绘制成过度.有关类似示例,请参阅我对此问题的回答,其中我绘制了生成树.
出错的原因是边列表文件(即格式"edgelist"
)将顶点从零开始编号.这在所有igraph版本中都是相同的,即使最近的R igraph包从一个顶点编号.
原因是我们希望R igraph与Python igraph和C igraph一致,就文件格式而言.即由igraph和Python igraph以相同的方式解释由Python绘制的文件(在本例中为边缘列表文件).从零开始的编号是文件格式的属性.
如果你已经有一个边缘列表文件,它开始用一个顶点编号,那不是igraph edgelist
文件格式,你需要转换它,只需从每个顶点id中减去一个.
解决方法是使用scan()
或读取文件read.table()
(scan()
更快,如果您有大文件可能很重要),然后graph()
直接调用.在这种情况下,您不需要减去一个,因为在R igraph中,顶点ID从一个编号.