layout
그래프 플롯의 레이아웃 변경
설명
layout(
는 그래프의 구조에 따라 자동으로 선택된 레이아웃 메서드를 사용하여 그래프 플롯 H
)H
의 레이아웃을 변경합니다. layout
함수는 H
의 XData
속성과 YData
속성을 수정합니다.
layout(
는 하나 이상의 이름-값 쌍의 인수로 지정된 추가 옵션을 사용합니다. 예를 들어, 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®은 그래프 성분을 그리드에 표시합니다.
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);
큰 성분에 더 많은 공간이 할당되면서 성분이 원점을 중심으로 방사형으로 표시되도록 graph 객체의 레이아웃 좌표를 업데이트하고 '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' | 힘-방향(Force-directed) 레이아웃 [1]입니다. 인접 노드 사이에는 인력을, 원거리 노드 사이에는 반발력을 사용합니다. |
|
'layered' | 계층화된 레이아웃 [2], [3], [4]입니다. 그래프 노드를 계층 집합에 배치하여 계층적 구조를 나타냅니다. 기본적으로 계층은 아래쪽으로 진행됩니다(유방향 비순환 그래프의 경우 화살표가 아래를 가리킴). |
|
'subspace' | 부분공간(Subspace)을 포함하는 레이아웃 [5]입니다. 그래프 노드를 고차원 부분공간에 플로팅한 후 위치를 2차원으로 다시 투영합니다. 기본적으로, 하위 공간 차원은 100 또는 노드의 총 개수 중 더 작은 값입니다. |
|
'force3' | 3차원 힘-방향(Force-directed) 레이아웃입니다. |
|
'subspace3' | 3차원 부분공간(Subspace)을 포함하는 레이아웃입니다. |
|
예: 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
— 힘-방향(Force-directed) 레이아웃 반복 횟수
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'
와 이 테이블의 값 중 하나가 쉼표로 구분되어 지정됩니다. (각 방향마다 간선을 하나씩 갖는 유방향 그래프 또는 다중 그래프와 같이) 두 노드 사이에 다중 간선이 있는 경우, 'WeightEffect'
를 계산하기 전에 먼저 가중치가 합산됩니다.
이 옵션은 method
가 'force'
나 'force3'
인 경우에만 사용할 수 있습니다.
값 | 설명 |
---|---|
| 간선 가중치가 레이아웃에 영향을 주지 않습니다. |
| 간선의 길이가 간선 가중치 |
| 간선의 길이가 간선 가중치 |
예: layout(H,'force','WeightEffect','inverse')
UseGravity
— 여러 성분을 갖는 레이아웃에 중력 적용 여부
'off'
또는 false
(디폴트 값) | 'on'
또는 true
여러 성분을 갖는 레이아웃에 중력 적용 여부로, 'UseGravity'
와 함께 'off'
, 'on'
, true
또는 false
가 쉼표로 구분되어 지정됩니다. 값 'on'
은 true
와 동일하고 값 'off'
는 false
와 동일합니다.
기본적으로 MATLAB®은 여러 성분을 갖는 그래프를 하나의 그리드에 표시합니다. 그리드에서 큰 성분과 작은 성분에 동일한 공간이 할당되기 때문에 큰 성분의 세부 정보가 가려질 수 있습니다. 'UseGravity'
를 'on'
또는 true
로 설정하면 여러 성분이 원점을 중심으로 방사형으로 표시됩니다. 이 레이아웃에서는 성분이 보다 자연스럽게 분산되며, 큰 성분에는 상대적으로 큰 공간이 할당됩니다.
이 옵션은 method
가 'force'
나 'force3'
인 경우에만 사용할 수 있습니다.
예: layout(H,'force','UseGravity',true)
데이터형: char
| logical
XStart
— 노드의 시작 x 좌표
벡터
노드의 시작 x 좌표로, 'XStart'
와 함께 노드 좌표로 구성된 벡터가 쉼표로 구분되어 지정됩니다. 힘-방향 알고리즘(Force-directed Algorithm)의 반복 적용으로 인해 노드 위치가 변경되기 전에, 'YStart'
와 함께 이 옵션을 사용하여 시작 지점의 2차원 좌표를 지정하십시오. 시작 지점의 3차원 좌표를 지정하려면 'YStart'
및 'ZStart'
와 함께 사용하십시오.
이 옵션은 method
가 'force'
나 'force3'
인 경우에만 사용할 수 있습니다.
예: layout(H,'force','XStart',x,'YStart',y)
데이터형: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
YStart
— 노드의 시작 y 좌표
벡터
노드의 시작 y 좌표로, 'YStart'
와 함께 노드 좌표로 구성된 벡터가 쉼표로 구분되어 지정됩니다. 힘-방향 알고리즘(Force-directed Algorithm)의 반복 적용으로 인해 노드 위치가 변경되기 전에, 'XStart'
와 함께 이 옵션을 사용하여 시작 지점의 2차원 좌표를 지정하십시오. 시작 지점의 3차원 좌표를 지정하려면 'XStart'
및 'ZStart'
와 함께 사용하십시오.
이 옵션은 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'
와 함께 노드 좌표로 구성된 벡터가 쉼표로 구분되어 지정됩니다. 힘-방향 알고리즘(Force-directed Algorithm)의 반복 적용으로 인해 노드 위치가 변경되기 전에, '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'
와 함께 하나 이상의 노드 인덱스 또는 노드 이름이 쉼표로 구분되어 지정됩니다.
다음 표에서는 숫자형 노드 인덱스 또는 노드 이름을 사용하여 하나 이상의 노드를 참조하는 몇 가지 방법을 보여줍니다.
형식 | 단일 노드 | 여러 노드 |
---|---|---|
노드 인덱스 | 스칼라 예: | 벡터 예: |
노드 이름 | 문자형 벡터 예: | 문자형 벡터로 구성된 셀형 배열 예: |
string형 스칼라 예: | string형 배열 예: |
이 옵션은 method
가 'layered'
인 경우에만 사용할 수 있습니다.
예: layout(H,'layered','Sources',[1 3 5])
Sinks
— 마지막 계층에 포함할 노드
노드 인덱스 | 노드 이름
마지막 계층에 포함할 노드로, 'Sinks'
와 함께 하나 이상의 노드 인덱스 또는 노드 이름이 쉼표로 구분되어 지정됩니다.
이 옵션은 method
가 'layered'
인 경우에만 사용할 수 있습니다.
예: layout(H,'layered','Sinks',[2 4 6])
AssignLayers
— 계층 할당 메서드
'auto'
(디폴트 값) | 'asap'
| 'alap'
계층 할당 메서드로, 'AssignLayers'
와 함께 다음 표에 나와 있는 옵션 중 하나가 쉼표로 구분되어 지정됩니다.
옵션 | 설명 |
---|---|
'auto' (디폴트 값) | 노드 할당은 'asap' 나 'alap' 중 더 간단한 형식을 사용합니다. |
'asap' | 가능한 한 빨리(As soon as possible)입니다. 모든 선행 노드가 이전 계층에 있어야 한다는 제약 조건이 주어진 경우 각 노드가 첫 번째로 가능한 계층에 할당됩니다. |
'alap' | 가능한 한 늦게(As late as possible)입니다. 모든 후행 노드가 이후 계층에 있어야 한다는 제약 조건이 주어진 경우 각 노드가 마지막으로 가능한 계층에 할당됩니다. |
이 옵션은 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 명령 창에 입력하십시오. 웹 브라우저는 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)