我正在使用R创建一组x,y坐标来绘制组织结构图,并且正在努力获得非径向布局。我将使用这些坐标在另一个应用程序中绘制图形,因此需要坐标而不是绘图。
我的数据是一个2列数据框,显示了与EmployeeID,ManagerID列的报告关系。
我正在使用包igraph,并首先使用:
创建图表g<-graph.data.frame(dataframe)
检查E(g)
我得到了我期望的边缘。绘制图形以径向形式给出正确的结构。
我的理解是reingold.tilford算法是我想用来获得传统非径向树的算法。所以我创建了一个布局:
l<-layout.reingold.tilford(g)
这应该给我我的x,y坐标,但是当我看到l时,我会得到类似的东西:
[,1] [,2]
[1,] 0.000000e+00 3
[2,] 0.000000e+00 3
[3,] 0.000000e+00 1
[4,] 1.899762e-52 3
[5,] 1.224168e-17 3
[6,] 6.582031e-85 3
[7,] 5.626306e+175 3
再次绘制图表:
plot(g,l)
给了我一条警告信息:
In if (axes) { :
the condition has length > 1 and only the first element will be used
和径向图一如既往。此外
summary(g)
给出:
IGRAPH DN-- 25 24 --
attr: name (v/c)
答案 0 :(得分:2)
似乎是Reingold-Tilford算法实现中的一个错误;至少布局的第7行中的X坐标非常奇怪。我会在igraph-help mailing list上提出相同的问题,并发送一个小例子图表,作者可以在其中重现您的问题。
编辑:在检查了您在邮件列表上发送的示例图之后,似乎1)它是Reingold-Tilford实现中的一个错误,2)它可以解决你反转所有边缘,使它们在树中向下指向(从父到子),因为这是Reingold-Tilford布局算法所假设的,它会给你错误的结果,因为它没有为指向“错误”方向的边缘做好准备。更高版本的igraph将包含问题的补丁。谢谢你的抬头!
编辑2 :对于记录,上述错误已经解决,将包含在igraph 0.6.1中。有关详细信息,请参阅the corresponding bug report和associated patch。