Main Content

layout

グラフ プロットのレイアウトを変更

説明

layout(H) は、グラフの構造に基づくレイアウト メソッドを自動選択することにより、グラフ プロット H のレイアウトを変更します。関数 layout は、HXDataYData のプロパティを変更します。

layout(H,method) はオプションでレイアウト メソッドを指定します。method'circle''force''layered''subspace''force3' または 'subspace3' のいずれかにすることができます。

layout(H,method,Name,Value) は、1 つ以上の名前と値のペアの引数で指定された追加のオプションを使用します。たとえば、layout(H,'force','Iterations',N) はフォース レイアウトの計算に使用する反復回数を指定し、layout(H,'layered','Sources',S) は階層型レイアウトを使用してソース ノード S を最初の層に入れます。

すべて折りたたむ

'force' レイアウトを使用してグラフを作成し、プロットします。

s = [1 1 1 1 1 6 6 6 6 6];
t = [2 3 4 5 6 7 8 9 10 11];
G = graph(s,t);
h = plot(G,'Layout','force');

Figure contains an axes object. The axes object contains an object of type graphplot.

レイアウトを既定に変更します。グラフの構造とプロパティに基づいて plot がレイアウトを決定します。結果は plot(G) を使用した場合と同じになります。

layout(h)

Figure contains an axes object. The axes object contains an object of type graphplot.

'layered' レイアウトを使用してグラフを作成し、プロットします。

s = [1 1 1 2 2 3 3 4 5 5 6 7];
t = [2 4 5 3 6 4 7 8 6 8 7 8];
G = graph(s,t);
h = plot(G,'Layout','layered');

Figure contains an axes object. The axes object contains an object of type graphplot.

グラフのレイアウトを、'subspace' メソッドを使用するように変更します。

layout(h,'subspace')

Figure contains an axes object. The axes object contains an object of type graphplot.

'layered' レイアウト メソッドを使用してグラフを作成し、プロットします。

s = [1 1 1 2 3 3 3 4 4];
t = [2 4 5 6 2 4 7 8 1];
G = digraph(s,t);
h = plot(G,'Layout','layered');

Figure contains an axes object. The axes object contains an object of type graphplot.

関数 layout を使用し、ソース ノードと水平方向を指定して階層レイアウトを詳細に設定します。

layout(h,'layered','Direction','right','Sources',[1 4])

Figure contains an axes object. The axes object contains an object of type graphplot.

複数の要素をもつグラフをプロットし、'UseGravity' オプションを使用して可視化を向上させる方法を示します。

多くの連結されていない要素に分離された 150 個のノードをもつグラフを作成し、プロットします。MATLAB® では、1 つのグリッドにグラフ要素をレイアウトします。

s = [1 3 5 7 7 10:100];
t = [2 4 6 8 9 randi([10 100],1,91)];
G = graph(s,t,[],150);
h = plot(G);

Figure contains an axes object. The axes object contains an object of type graphplot.

グラフ オブジェクトのレイアウト座標を更新し、'UseGravity'true に指定します。これで、要素が原点を中心に放射状にレイアウトされ、大きい要素に多くのスペースが割り当てられます。

layout(h,'force','UseGravity',true)

Figure contains an axes object. The axes object contains an object of type graphplot.

'WeightEffect' の名前と値のペアを使用してグラフをプロットし、グラフ エッジの長さが重みに比例するようにします。

重み付きエッジをもつ有向グラフを作成し、プロットします。

s = [1 1 1 1 1 2 2 2 3 3 3 3 3];
t = [2 4 5 6 7 3 8 9 10 11 12 13 14];
weights = randi([1 20],1,13);
G = graph(s,t,weights);
p = plot(G,'Layout','force','EdgeLabel',G.Edges.Weight);

Figure contains an axes object. The axes object contains an object of type graphplot.

'WeightEffect' の名前と値のペアを使用してグラフのレイアウトを再計算すると、各エッジの長さがその重みに比例しています。これにより、重みが最大のエッジが最も長くなります。

layout(p,'force','WeightEffect','direct')

Figure contains an axes object. The axes object contains an object of type graphplot.

入力引数

すべて折りたたむ

入力グラフ プロット。GraphPlot オブジェクトとして指定します。関数 graph または digraph を使用してグラフを作成してから、GraphPlot オブジェクトを返す出力引数を指定して plot を使用します。

例: H = plot(G)

レイアウト メソッド。次の表のいずれかのオプションとして指定します。この表には、各レイアウト メソッドをさらに調整するために使用できる名前と値のペアも示します。

オプション説明レイアウト固有の名前と値のペア
'auto' (既定)

グラフのサイズと構造に基づいた、レイアウト メソッドの自動選択。

'circle'

円形レイアウト。中心が原点、半径が 1 の円上にグラフ ノードを配置します。

'Center' — 円形レイアウトの中心ノード

'force'

力指向レイアウト[1]。隣接ノード間に引力、離れたノード間に反発力を使用します。

'Iterations' — 力指向レイアウトの反復回数

'WeightEffect' — レイアウトに対するエッジの重みの影響

'UseGravity' — 複数の要素をもつレイアウトでの重力切り替え

'XStart' — ノードの開始 x 座標

'YStart' — ノードの開始 y 座標

'layered'

階層型レイアウト [2][3][4]。グラフ ノードを一連の層に配置し、階層構造を表します。既定では、階層は下に進みます (有向非循環グラフの矢印が下を向く)。

'Direction' — 層の方向

'Sources' — 最初の層に含めるノード

'Sinks' — 最後の層に含めるノード

'AssignLayers' — 層の割り当てメソッド

'subspace'

部分空間を埋め込んだレイアウト[5]。グラフ ノードを高次の埋め込み部分空間にプロットし、その位置を 2 次元に投影します。既定では、部分空間の次元は 100 とノードの合計値のうち小さい値になります。

'Dimension' — 埋め込む部分空間の次元

'force3'3 次元力指向レイアウト。

'Iterations' — 力指向レイアウトの反復回数

'WeightEffect' — レイアウトに対するエッジの重みの影響

'UseGravity' — 複数の要素をもつレイアウトでの重力切り替え

'XStart' — ノードの開始 x 座標

'YStart' — ノードの開始 y 座標

'ZStart' — ノードの開始 z 座標

'subspace3'3 次元部分空間を埋め込んだレイアウト。

'Dimension' — 埋め込む部分空間の次元

例: layout(H,'layered')

例: layout(H,'force3','Iterations',10)

例: layout(H,'subspace','Dimension',50)

名前と値の引数

引数のオプションのペアを Name1=Value1,...,NameN=ValueN として指定します。ここで Name は引数名で、Value は対応する値です。名前と値の引数は他の引数の後に指定しなければなりませんが、ペアの順序は重要ではありません。

R2021a より前では、コンマを使用してそれぞれの名前と値を区切り、Name を引用符で囲みます。

例: layout(H,'subspace','Dimension',200)

force

すべて折りたたむ

力指向レイアウトの反復回数。'Iterations' と正のスカラー整数で構成されるコンマ区切りのペアとして指定します。

このオプションは、method'force' または 'force3' の場合にのみ使用できます。

例: layout(H,'force','Iterations',250)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

レイアウトに対するエッジの重みの影響。'WeightEffect' とこの表のいずれかの値で構成されるコンマ区切りのペアとして指定します。2 つのノード間に複数のエッジがある場合 (各方向に 1 つのエッジがある有向グラフ、または多重グラフ)、'WeightEffect' を計算する前に重みが合計されます。

このオプションは、method'force' または 'force3' の場合にのみ使用できます。

説明

'none' (既定)

エッジの重みはレイアウトに影響しません。

'direct'

エッジの長さはエッジの重み G.Edges.Weight に比例します。エッジの重みが大きくなると、エッジが長くなります。

'inverse'

エッジの長さは、エッジの重み 1./G.Edges.Weight に反比例します。エッジの重みが大きくなると、エッジが短くなります。

例: layout(H,'force','WeightEffect','inverse')

複数の要素をもつレイアウトでの重力切り替え。'UseGravity' および 'off''on'true、または false のいずれかで構成されるコンマ区切りのペアとして指定します。'on' の値は true と等価であり、'off'false と等価です。

既定では、MATLAB® は、1 つのグリッドに複数の要素をもつグラフをレイアウトします。グリッドには大きい要素の詳細が表示されない場合があります。大きい要素にも小さい要素と同じ量のスペースが与えられているためです。'UseGravity''on' または true に設定すると、複数の要素が原点を中心に放射状にレイアウトされます。このレイアウトでは要素がより自然な形で分散され、大きい要素により多くのスペースが与えられます。

このオプションは、method'force' または 'force3' の場合にのみ使用できます。

例: layout(H,'force','UseGravity',true)

データ型: char | logical

ノードの開始 x 座標。'XStart' と、ノード座標のベクトルで構成されるコンマ区切りのペアとして指定します。このオプションを 'YStart' と共に使用して、力指向アルゴリズムの反復がノードの位置を変更する前の 2 次元の開始座標 (または 'YStart' および 'ZStart' で 3 次元の開始座標) を指定します。

このオプションは、method'force' または 'force3' の場合にのみ使用できます。

例: layout(H,'force','XStart',x,'YStart',y)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ノードの開始 y 座標。'YStart' と、ノード座標のベクトルで構成されるコンマ区切りのペアとして指定します。このオプションを 'XStart' と共に使用して、力指向アルゴリズムの反復がノードの位置を変更する前の 2 次元の開始座標 (または 'XStart' および 'ZStart' で 3 次元の開始座標) を指定します。

このオプションは、method'force' または 'force3' の場合にのみ使用できます。

例: layout(H,'force','XStart',x,'YStart',y)

例: layout(H,'force','XStart',x,'YStart',y,'ZStart',z)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

ノードの開始 z 座標。'ZStart' と、ノード座標のベクトルで構成されるコンマ区切りのペアとして指定します。このオプションを 'XStart' および 'YStart' と共に使用して、力指向アルゴリズムの反復がノードの位置を変更する前のノードの開始 x 座標、開始 y 座標および開始 z 座標を指定します。

このオプションは、method'force3' の場合にのみ使用できます。

例: layout(H,'force','XStart',x,'YStart',y,'ZStart',z)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

layered

すべて折りたたむ

層の方向。'Direction' と、'down''up''left' または 'right' のいずれかで構成されるコンマ区切りのペアとして指定します。有向非循環 (DAG) グラフの場合、矢印は指定方向を向きます。

このオプションは、method'layered' の場合にのみ使用できます。

例: layout(H,'layered','Direction','up')

最初の層に含めるノード。'Sources' と 1 つ以上のノード インデックスまたはノード名で構成されるコンマ区切りのペアとして指定します。

次の表に、1 つ以上のノードを数値ノード インデックスまたはノード名のいずれかで参照するさまざまな方法を示します。

形式単一ノード複数ノード
ノード インデックス

スカラー

例: 1

ベクトル

例: [1 2 3]

ノード名

文字ベクトル

例: 'A'

文字ベクトルの cell 配列

例: {'A' 'B' 'C'}

string スカラー

例: "A"

string 配列

例: ["A" "B" "C"]

このオプションは、method'layered' の場合にのみ使用できます。

例: layout(H,'layered','Sources',[1 3 5])

最後の層に含めるノード。'Sinks' と 1 つ以上のノード インデックスまたはノード名で構成されるコンマ区切りのペアとして指定します。

このオプションは、method'layered' の場合にのみ使用できます。

例: layout(H,'layered','Sinks',[2 4 6])

層の割り当てメソッド。'AssignLayers' と、次の表のいずれかのオプションで構成されるコンマ区切りのペアとして指定します。

オプション説明
'auto' (既定)ノードの割り当てには、'asap''alap' のうち小型の方が使用されます。
'asap'可能な限り上位。あるノードの先行ノードはそれより上位の層に存在しなければならないという制約に従って、各ノードは可能な最初の層に割り当てられます。
'alap'可能な限り下位。あるノードの後続ノードはそれより下位の層に存在しなければならないという制約に従って、各ノードは可能な最後の層に割り当てられます。

このオプションは、method'layered' の場合にのみ使用できます。

例: layout(H,'layered','AssignLayers','alap')

subspace

すべて折りたたむ

埋め込む部分空間の次元。'Dimension' と、正のスカラー整数で構成されるコンマ区切りペアとして指定します。

  • 既定の整数値は min([100, numnodes(G)]) です。

  • 'subspace' レイアウトでは、整数は 2 以上でなければなりません。

  • 'subspace3' レイアウトでは、整数は 3 以上でなければなりません。

  • いずれの場合も、整数はノード数より小さくなければなりません。

このオプションは、method'subspace' または 'subspace3' の場合にのみ使用できます。

例: layout(H,'subspace','Dimension',d)

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

すべて折りたたむ

円形レイアウトの中心ノード。'Center' と次の表のいずれかの値で構成される、コンマ区切りのペアとして指定します。

スカラー ノード インデックス1
文字ベクトルのノード名'A'
string スカラーのノード名"A"

このオプションは、method'circle' の場合にのみ使用できます。

例: layout(H,'circle','Center',3) では、ノード 3 が中心に配置されます。

例: layout(H,'circle','Center','Node1') では、'Node1' という名前のノードが中心に配置されます。

ヒント

  • グラフをプロットするときにレイアウトを変更するには、Layout の名前と値のペアを使用します。たとえば、plot(G,'Layout','circle') はグラフ G を円形レイアウトでプロットします。

  • 'force' または 'force3' レイアウト メソッドを使用するときの最良の方法は、XStartYStart および ZStart を使用して以前の出力からアルゴリズムを再開するのではなく、アルゴリズムでより多くの反復回数を使用することです。反復回数が 100 回のアルゴリズムの実行結果は、50 回の反復後、その終了位置からアルゴリズムを再開してさらに 50 回反復実行した結果とは異なります。

参照

[1] Fruchterman, T., and E. Reingold,. “Graph Drawing by Force-directed Placement.” Software — Practice & Experience. Vol. 21 (11), 1991, pp. 1129–1164.

[2] Gansner, E., E. Koutsofios, S. North, and K.-P Vo. “A Technique for Drawing Directed Graphs.” IEEE Transactions on Software Engineering. Vol.19, 1993, pp. 214–230.

[3] Barth, W., M. Juenger, and P. Mutzel. “Simple and Efficient Bilayer Cross Counting.” Journal of Graph Algorithms and Applications. Vol.8 (2), 2004, pp. 179–194.

[4] Brandes, U., and B. Koepf. “Fast and Simple Horizontal Coordinate Assignment.” LNCS. Vol. 2265, 2002, pp. 31–44.

[5] Y. Koren. “Drawing Graphs by Eigenvectors: Theory and Practice.” Computers and Mathematics with Applications. Vol. 49, 2005, pp. 1867–1888.

バージョン履歴

R2015b で導入