layout
グラフ プロットのレイアウトを変更
説明
layout(
は、グラフの構造に基づくレイアウト メソッドを自動選択することにより、グラフ プロット H
)H
のレイアウトを変更します。関数 layout
は、H
の XData
と YData
のプロパティを変更します。
layout(
は、1 つ以上の名前と値のペアの引数で指定された追加のオプションを使用します。たとえば、H
,method
,Name,Value
)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');
レイアウトを既定に変更します。グラフの構造とプロパティに基づいて plot
がレイアウトを決定します。結果は plot(G)
を使用した場合と同じになります。
layout(h)
グラフのレイアウトを変更
'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');
グラフのレイアウトを、'subspace'
メソッドを使用するように変更します。
layout(h,'subspace')
グラフのレイアウト メソッドの詳細設定
'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');
関数 layout
を使用し、ソース ノードと水平方向を指定して階層レイアウトを詳細に設定します。
layout(h,'layered','Direction','right','Sources',[1 4])
複数の要素をもつグラフ レイアウト
複数の要素をもつグラフをプロットし、'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);
グラフ オブジェクトのレイアウト座標を更新し、'UseGravity'
を true
に指定します。これで、要素が原点を中心に放射状にレイアウトされ、大きい要素に多くのスペースが割り当てられます。
layout(h,'force','UseGravity',true)
エッジの重みに基づくグラフのレイアウト
'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);
'WeightEffect'
の名前と値のペアを使用してグラフのレイアウトを再計算すると、各エッジの長さがその重みに比例しています。これにより、重みが最大のエッジが最も長くなります。
layout(p,'force','WeightEffect','direct')
入力引数
method
— レイアウト メソッド
'auto'
(既定値) | 'circle'
| 'force'
| 'layered'
| 'subspace'
| 'force3'
| 'subspace3'
レイアウト メソッド。次の表のいずれかのオプションとして指定します。この表には、各レイアウト メソッドをさらに調整するために使用できる名前と値のペアも示します。
オプション | 説明 | レイアウト固有の名前と値のペア |
---|---|---|
'auto' (既定) | グラフのサイズと構造に基づいた、レイアウト メソッドの自動選択。 | — |
'circle' | 円形レイアウト。中心が原点、半径が 1 の円上にグラフ ノードを配置します。 |
|
'force' | 力指向レイアウト[1]。隣接ノード間に引力、離れたノード間に反発力を使用します。 |
|
'layered' | 階層型レイアウト [2]、[3]、[4]。グラフ ノードを一連の層に配置し、階層構造を表します。既定では、階層は下に進みます (有向非循環グラフの矢印が下を向く)。 |
|
'subspace' | 部分空間を埋め込んだレイアウト[5]。グラフ ノードを高次の埋め込み部分空間にプロットし、その位置を 2 次元に投影します。既定では、部分空間の次元は 100 とノードの合計値のうち小さい値になります。 |
|
'force3' | 3 次元力指向レイアウト。 |
|
'subspace3' | 3 次元部分空間を埋め込んだレイアウト。 |
|
例: 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)
Iterations
— 力指向レイアウトの反復回数
100
(既定値) | 正のスカラー整数
力指向レイアウトの反復回数。'Iterations'
と正のスカラー整数で構成されるコンマ区切りのペアとして指定します。
このオプションは、method
が 'force'
または 'force3'
の場合にのみ使用できます。
例: layout(H,'force','Iterations',250)
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
WeightEffect
— レイアウトに対するエッジの重みの影響
'none'
(既定値) | 'direct'
| 'inverse'
レイアウトに対するエッジの重みの影響。'WeightEffect'
とこの表のいずれかの値で構成されるコンマ区切りのペアとして指定します。2 つのノード間に複数のエッジがある場合 (各方向に 1 つのエッジがある有向グラフ、または多重グラフ)、'WeightEffect'
を計算する前に重みが合計されます。
このオプションは、method
が 'force'
または 'force3'
の場合にのみ使用できます。
値 | 説明 |
---|---|
| エッジの重みはレイアウトに影響しません。 |
| エッジの長さはエッジの重み |
| エッジの長さは、エッジの重み |
例: layout(H,'force','WeightEffect','inverse')
UseGravity
— 複数の要素をもつレイアウトでの重力切り替え
'off'
または false
(既定値) | 'on'
または true
複数の要素をもつレイアウトでの重力切り替え。'UseGravity'
および 'off'
、'on'
、true
、または false
のいずれかで構成されるコンマ区切りのペアとして指定します。'on'
の値は true
と等価であり、'off'
は false
と等価です。
既定では、MATLAB® は、1 つのグリッドに複数の要素をもつグラフをレイアウトします。グリッドには大きい要素の詳細が表示されない場合があります。大きい要素にも小さい要素と同じ量のスペースが与えられているためです。'UseGravity'
を 'on'
または true
に設定すると、複数の要素が原点を中心に放射状にレイアウトされます。このレイアウトでは要素がより自然な形で分散され、大きい要素により多くのスペースが与えられます。
このオプションは、method
が 'force'
または 'force3'
の場合にのみ使用できます。
例: layout(H,'force','UseGravity',true)
データ型: char
| logical
XStart
— ノードの開始 x 座標
ベクトル
ノードの開始 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
YStart
— ノードの開始 y 座標
ベクトル
ノードの開始 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
ZStart
— ノードの開始 z 座標
ベクトル
ノードの開始 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
Direction
— 層の方向
'down'
(既定値) | 'up'
| 'left'
| 'right'
層の方向。'Direction'
と、'down'
、'up'
、'left'
または 'right'
のいずれかで構成されるコンマ区切りのペアとして指定します。有向非循環 (DAG) グラフの場合、矢印は指定方向を向きます。
このオプションは、method
が 'layered'
の場合にのみ使用できます。
例: layout(H,'layered','Direction','up')
Sources
— 最初の層に含めるノード
ノード インデックス | ノード名
最初の層に含めるノード。'Sources'
と 1 つ以上のノード インデックスまたはノード名で構成されるコンマ区切りのペアとして指定します。
次の表に、1 つ以上のノードを数値ノード インデックスまたはノード名のいずれかで参照するさまざまな方法を示します。
形式 | 単一ノード | 複数ノード |
---|---|---|
ノード インデックス | スカラー 例: | ベクトル 例: |
ノード名 | 文字ベクトル 例: | 文字ベクトルの cell 配列 例: |
string スカラー 例: | string 配列 例: |
このオプションは、method
が 'layered'
の場合にのみ使用できます。
例: layout(H,'layered','Sources',[1 3 5])
Sinks
— 最後の層に含めるノード
ノード インデックス | ノード名
最後の層に含めるノード。'Sinks'
と 1 つ以上のノード インデックスまたはノード名で構成されるコンマ区切りのペアとして指定します。
このオプションは、method
が 'layered'
の場合にのみ使用できます。
例: layout(H,'layered','Sinks',[2 4 6])
AssignLayers
— 層の割り当てメソッド
'auto'
(既定値) | 'asap'
| 'alap'
層の割り当てメソッド。'AssignLayers'
と、次の表のいずれかのオプションで構成されるコンマ区切りのペアとして指定します。
オプション | 説明 |
---|---|
'auto' (既定) | ノードの割り当てには、'asap' と 'alap' のうち小型の方が使用されます。 |
'asap' | 可能な限り上位。あるノードの先行ノードはそれより上位の層に存在しなければならないという制約に従って、各ノードは可能な最初の層に割り当てられます。 |
'alap' | 可能な限り下位。あるノードの後続ノードはそれより下位の層に存在しなければならないという制約に従って、各ノードは可能な最後の層に割り当てられます。 |
このオプションは、method
が 'layered'
の場合にのみ使用できます。
例: layout(H,'layered','AssignLayers','alap')
Dimension
— 埋め込む部分空間の次元
正のスカラー整数
埋め込む部分空間の次元。'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
— 円形レイアウトの中心ノード
ノード インデックス | ノード名
円形レイアウトの中心ノード。'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'
レイアウト メソッドを使用するときの最良の方法は、XStart
、YStart
および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 で導入
参考
関数
オブジェクト
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)