2

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

1 回答 1

2

似乎是 Reingold-Tilford 算法实现中的一个错误;至少布局第 7 行的 X 坐标很奇怪。我会在igraph-help 邮件列表上问同样的问题,并发送一个小示例图,作者可以在上面重现您的问题。

编辑:在检查了您在邮件列表中发送的示例图之后,似乎 1)它是 Reingold-Tilford 实现中的一个错误,2)如果您反转所有边缘以便它们指向下方,则可以解决它树(从父级到子级),因为这是 Reingold-Tilford 布局算法所假设的,并且它会给您错误的结果,因为它没有为指向“错误”方向的边缘做好准备。更高版本的 igraph 将包含针对该问题的补丁。感谢您的提醒!

编辑 2:作为记录,上述错误已得到解决,并将包含在 igraph 0.6.1 中。有关更多信息和相关补丁,请参阅相应的错误报告

于 2012-12-13T22:11:17.893 回答