使用R igraph获取树图的x,y坐标

时间:2012-12-13 19:36:52

标签: r igraph

我正在使用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)

1 个答案:

答案 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 reportassociated patch