igraphでは、レイアウトは座標の行列です。あなたが任意のレイアウトメソッドを呼び出す場合、行列を得る:
loa <- layout.fruchterman.reingold(a)
lob <- layout.fruchterman.reingold(a)
あなたはlayout
グラフ属性にこれらの行列を割り当てた場合、IGRAPHがプロット時に自動的にそれらを使用するか、直接プロットメソッドに渡すことができます。
を
b$layout <- loa
plot(a)
plot(b, layout = lob)
彼らが持っている場合は、そのレイアウト属性を二つのグラフの和集合を取る場合は、マージされますが、layout_1
とlayout_2
に改名されることはありません。私は、座標系の東半分に他の2つのレイアウト、1が西にスケールを、作成した。ここ
a <- barabasi.game(10)
b <- barabasi.game(20)
a$layout <- layout.norm(layout_with_fr(a), -1, 0, -1, 1) # each subgraph
b$layout <- layout.norm(layout_with_fr(b), 0, 1, -1, 1) # in their own space
V(a)$x <- a$layout[,1]
V(a)$y <- a$layout[,2]
V(b)$x <- b$layout[,1]
V(b)$y <- b$layout[,2]
V(a)$color <- 'blue'
ab <- union(a, b)
V(ab)$x <- vapply(seq(vcount(ab)),
function(vid){
ifelse(is.na(V(ab)$x_1[vid]),
V(ab)$x_2[vid],
V(ab)$x_1[vid])
}, 0.0)
V(ab)$y <- vapply(seq(vcount(ab)),
function(vid){
ifelse(is.na(V(ab)$y_1[vid]),
V(ab)$y_2[vid],
V(ab)$y_1[vid])
}, 0.0)
ab$layout <- cbind(V(ab)$x, V(ab)$y)
V(ab)$color[is.na(V(ab)$color)] <- 'yellow'
plot(ab, rescale = FALSE)
:あなたが分離された非重複部分を維持し、レイアウトをマージしたい場合は、私はこのアイデアを持っています。次に、デフォルトで座標をa
から、b
から、b
の一部でない場合は、レイアウトをマージしました。 x
とy
座標から新しいレイアウトマトリックスを作成した後、グラフをrescale = FALSE
とプロットしたので、座標は変更されません。
注:数多くの頂点IDに基づいていないグラフをマージしたい場合があります。このためには、name
頂点属性を作成し、byname = TRUE
パラメータをunion
メソッドに渡します。
いくつかの注意点:#1必要なパッケージ( 'library(igraph)')#2を追加し、再現可能にするためにいくつかのランダムアクションの前にシードを設定してください(例えば 'set.seed(1)')。 #3 Afaikには、マージ(?)中に作成された "レイアウト機能"がありません。レイアウトを作成することができます。 'layout.auto(ab)'や 'layout.auto(a)'を使って、ノード/頂点の座標を与えます。 – lukeA