3

以下が可能かどうか疑問に思っていました:

現在、別の別の大きなグラフ (グラフ B) に属するグラフ (グラフ A) にノードのサブセットがあります。

グラフ A でレイアウト生成アルゴリズムを実行するときに、このノードのサブセットに関連するグラフ B のレイアウトを保持したいと思います。レイアウト アルゴリズムのいずれかである可能性があります。

 layout.circle(graph, params)
 layout.sphere(graph, params)
 layout.fruchterman.reingold(graph, ..., dim=2, params)
 layout.kamada.kawai(graph, ..., dim=2, params)
 layout.spring(graph, ..., params)
 layout.reingold.tilford(graph, ..., params)
 layout.fruchterman.reingold.grid(graph, ..., params)
 layout.lgl(graph, ..., params)
 layout.graphopt(graph, ..., params=list())
 layout.mds(graph, dist=NULL, dim=2, options=igraph.arpack.default)
 layout.svd(graph, d=shortest.paths(graph), ...)
4

2 に答える 2

2

またはのminxmaxxminyおよびmaxy引数を使用して、一部の頂点を完全に修正できます。これらの引数は、頂点固有の座標の下限および/または上限を指定します。layout.fruchterman.reingold()layout.kamada.kawai()

修正したい頂点については、それらを修正する値に正確に設定し、他の頂点についてはminxいくつかの小さな負の値に設定し(これもうまくいくかもしれません)、大きな値に-Inf設定します(これもうまくいくかもしれません)。 .maxxInf

最初のグラフと 2 番目のグラフの両方で、完全なレイアウトの再スケーリングを避けるために、rescale=FALSE引数 inを使用する必要がある場合があります。plot.igraph()

編集:

マニュアルから:

' minx' そうでない場合は、' ' 頂点の座標のNULL下限を示す数値ベクトルでなければなりません。xベクトルの長さは、グラフ内の頂点の数と一致する必要があります。

' maxx' ' ' と同様minxですが、上限を指定します。

例えば:

g <- graph.star(10, center=1)

minx <- rep(-Inf, vcount(g))
maxx <- rep( Inf, vcount(g))
minx[1] <- 0
maxx[1] <- 0
lay <- layout.fruchterman.reingold(g, minx=minx, maxx=maxx, miny=minx, maxy=maxx)

plot(g, layout=lay)

最初の頂点を (0,0) に固定します (再スケーリングによって変更される場合があります。再スケーリングを避けるために、使用rescale=FALSEplot()てプロット制限を設定します)。

ここに画像の説明を入力

于 2012-08-27T13:58:01.097 に答える
0

igraph のレイアウトは、(ノード数) × 2 の行列として定義されます。最初の列は (任意のスケールで) x 座標を示し、2 番目の列は y 座標を示します。これらの関数のいずれかの結果を格納してこの行列を取得し、layout別のグラフをプロットするときにそれを引数に渡すことができます。

library("igraph")

# A 3-node network:
g <- graph.adjacency(matrix(1,3,3))

# Obtain a layout:
l <- layout.circle(g)

# A different 3-node network:
g2 <- graph.adjacency(matrix(0,3,3))

# Plot second network with layout based on first network:
plot(g2,layout=l)

編集

グラフのサブセットがある場合は、このマトリックスに単純にインデックスを付けることができます。例えば:

# A 3-node network:
g <- graph.adjacency(matrix(1,3,3))

# Obtain a layout:
l <- layout.circle(g)

# A 2-node subset:
g2 <- graph.adjacency(matrix(1,2,2))

# Plot second network with layout based on first network:
plot(g2,layout=l[1:2,])
于 2012-08-26T10:30:18.380 に答える