2

R を使用して一連の x、y 座標を作成し、組織図をプロットしていますが、非放射状のレイアウトを取得するのに苦労しています。これらの座標を使用して別のアプリケーションでグラフをプロットするため、プロットではなく座標が必要です。

私のデータは、列 EmployeeID、ManagerID とのレポート関係を示す 2 列のデータ フレームです。

パッケージ 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 に答える