Rでの静的および動的ネットワークの視覚化、パート4

最初の部分で

第二部 :R.チャートの色とフォント

3番目の部分:グラフ、頂点、およびエッジのパラメーター。

この部分では、ネットワークホスティング。

ネットワークプレースメント


ネットワークロケーションは、グラフの各頂点の座標を返すアルゴリズムです。
配置を調べるには、80頂点のわずかに大きいグラフを作成します。 関数barabasi.gameを使用します。この関数は、1つの頂点から開始し、指定された優先アタッチメントのレベル(ネットワーク上のより一般的な頂点との接続を優先する新しいオブジェクトの数)に応じて頂点とエッジを増加させる単純なグラフを生成します。
net.bg <- barabasi.game(80) V(net.bg)$frame.color <- "white" V(net.bg)$color <- "orange" V(net.bg)$label <- "" V(net.bg)$size <- 10 E(net.bg)$arrow.mode <- 0 plot(net.bg) 



ビルド関数で配置を指定できます。
 plot(net.bg, layout=layout.random) 



または、事前に頂点の座標を計算します。
 l <- layout.circle(net.bg) plot(net.bg, layout=l) 



lは、グラフのN個の頂点のx座標とy座標(N x 2)の行列です。 簡単に設定できます:
 l <- matrix(c(1:vcount(net.bg), c(1, vcount(net.bg):2)), vcount(net.bg), 2) plot(net.bg, layout=l) 



この配置は単なる例であり、あまり有用ではありません。 幸いなことに、igraphには次のような組み込みのプレースメントがあります。
 #    l <- layout.random(net.bg) plot(net.bg, layout=l) 



 #    l <- layout.circle(net.bg) plot(net.bg, layout=l) 



 #    3D- l <- layout.sphere(net.bg) plot(net.bg, layout=l) 



Fruchterman-Reingoldは、最も一般的に使用される力配置アルゴリズムの1つです。

パワー配置では、同じ長さのエッジと可能な最小数の交差点を持つ美しいグラフを作成します。 これらは、物理システムの形式でグラフを表します。 頂点は、過度の近似で互いに反発する荷電粒子です。 リブは、互いに近くにある接続された頂点を引き付けるバネのように動作します。 その結果、頂点はグラフ領域全体に均等に分散され、多数のリンクを持つ頂点が互いに近くなるという意味で、配置は直感的です。 これらのアルゴリズムの欠点は、かなり遅いため、頂点が1000を超えるグラフではほとんど使用されないことです。

この配置に設定できるパラメーターは次のとおりです。 area (デフォルトは頂点の数の2乗)とrepulserad (反発の抑制半径は面積に頂点の数を掛けた値)です。 両方のパラメーターはチャートのレイアウトに影響します-結果に満足するまで変更してください。

「重み」パラメータを使用して、より太いrib骨で接続された頂点間の引力を増やすこともできます。

配置が厳密に定義されていないことに気付くでしょう-起動が異なると設定がわずかに異なります。 場所l保存すると、同じ結果を何度も取得できます。これは、時間の経過や異なる関係でグラフの変更を作成する必要がある場合に役立ちます。また、複数のグラフの同じ場所に頂点を残す必要があります。

fruchterman.reingold.gridの配置はfruchterman.reingold.grid似ていますが、より高速です。
 l <- layout.fruchterman.reingold(net.bg, repulserad=vcount(net.bg)^3, area=vcount(net.bg)^2.4) par(mfrow=c(1,2), mar=c(0,0,0,0)) #    - 1 , 2  plot(net.bg, layout=layout.fruchterman.reingold) plot(net.bg, layout=l) 



 dev.off() #  ,   . 

連結グラフで良い結果を示すもう1つの一般的な力配置アルゴリズムは、鎌田川井です。 Fruchtermann-Reingoldと同様に、彼の目標は、スプリングシステムのエネルギーを最小限にすることです。 Igraphには、 layout.spring()と呼ばれるスプリングベースのlayout.spring()も含まれています。
 l <- layout.kamada.kawai(net.bg) plot(net.bg, layout=l) l <- layout.spring(net.bg, mass=.5) plot(net.bg, layout=l) 



LGL(Large Graph Layout)アルゴリズムは、大きな連結グラフ用に設計されています。 また、ルート(頂点)を指定することもできます。頂点は、配置の中央に配置されます。
 plot(net.bg, layout=layout.lgl) 



デフォルトでは、グラフの座標はxとyの両方の間隔[-1.1]にスケーリングされます。 これは、パラメーターrescale=FALSEを使用して変更でき、座標に数値を乗算することでチャートを手動でrescale=FALSEできます。 layout.norm関数を使用layout.normと、目的の境界でグラフを正規化できlayout.norm
 l <- layout.fruchterman.reingold(net.bg) l <- layout.norm(l, ymin=-1, ymax=1, xmin=-1, xmax=1) par(mfrow=c(2,2), mar=c(0,0,0,0)) plot(net.bg, rescale=F, layout=l*0.4) plot(net.bg, rescale=F, layout=l*0.6) plot(net.bg, rescale=F, layout=l*0.8) plot(net.bg, rescale=F, layout=l*1.0) 


 dev.off() 

デフォルトでは、igraphはlayout.auto使用しlayout.auto 。 グラフのプロパティ(サイズと接続性)に基づいて、必要な配置アルゴリズムを自動的に選択します。

igraphで利用可能なプレースメントを見てみましょう。
 layouts <- grep("^layout\\.", ls("package:igraph"), value=TRUE) #  ,     . layouts <- layouts[!grepl("bipartite|merge|norm|sugiyama", layouts)] par(mfrow=c(3,3)) for (layout in layouts) { print(layout) l <- do.call(layout, list(net)) plot(net, edge.arrow.mode=0, layout=l, main=layout) } dev.off() 

Source: https://habr.com/ru/post/J266199/


All Articles