2012-02-26 19 views
6

頂点間の距離がエッジウェイト*に対応するグラフを描画しようとしています。グラフビーズではこのようなグラフを描く方法があります。 igraphパッケージ(特にgraph.adkacency)でRでこれを行う方法はありますか?ウェイトに応じたノード間の距離の可視化 - R

おかげで、

ノーム

答えて

4

これは不可能ですオブジェクト。だからあなたはそれを近似することしかできません。このために、「強制組み込み」アルゴリズムを使用することができます。 igraphにはいくつかあります。私がよく使うのは、Fruchterman-Reingoldアルゴリズムです。

詳細について参照:

library("igraph") 
?layout.fruchterman.reingold 

編集:

注意ノード間の距離が絶対エッジ重みの逆数と幾分対応すること。

3

あなたのデータが完璧でない限り、Sacha Epskampと同様に、三角不等式に違反しないグラフを描くことはできません。しかし、そのような違反を最小限に抑えることを目標とした技術Multidimensional scaling (MDS)があります。

statsパッケージのcmdscaleです。 (あなたは具体的には、約igraphを問い合わせるた)あなたが任意のグラフィックパッケージを使用してxyをプロットすることができ、もちろん

> require(graphics) 
> 
> loc <- cmdscale(eurodist) 
> x <- loc[,1] 
> y <- -loc[,2] 
> plot(x, y, type="n", xlab="", ylab="", main="cmdscale(eurodist)") 
> text(x, y, rownames(loc), cex=0.8) 

:私は?cmdscaleの下部にある例をお勧めします。

最後に、「多次元スケーリング」または「MDS」を検索すると、他の実装もたくさん見つかります。がんばろう。

+2

また、レイアウト座標を得るために全距離マトリックス上でMDSを実行するように見える 'igraph'には' layout.mds'という関数があります。 –

関連する問題