Main Content

layout

그래프 플롯의 레이아웃 변경

설명

예제

layout(H)는 그래프의 구조에 따라 자동으로 선택된 레이아웃 메서드를 사용하여 그래프 플롯 H의 레이아웃을 변경합니다. layout 함수는 HXData 속성과 YData 속성을 수정합니다.

예제

layout(H,method)는 레이아웃 메서드를 선택적으로 지정합니다. method'circle', 'force', 'layered', 'subspace', 'force3', 'subspace3' 중 하나일 수 있습니다.

예제

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');

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®은 그래프 성분을 그리드에 표시합니다.

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.

큰 성분에 더 많은 공간이 할당되면서 성분이 원점을 중심으로 방사형으로 표시되도록 graph 객체의 레이아웃 좌표를 업데이트하고 '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'

힘-방향(Force-directed) 레이아웃 [1]입니다. 인접 노드 사이에는 인력을, 원거리 노드 사이에는 반발력을 사용합니다.

'Iterations' — 힘-방향(Force-directed) 레이아웃 반복 횟수

'WeightEffect' — 간선 가중치가 레이아웃에 미치는 영향

'UseGravity' — 여러 성분을 갖는 레이아웃에 중력 적용 여부

'XStart' — 노드의 시작 x 좌표

'YStart' — 노드의 시작 y 좌표

'layered'

계층화된 레이아웃 [2], [3], [4]입니다. 그래프 노드를 계층 집합에 배치하여 계층적 구조를 나타냅니다. 기본적으로 계층은 아래쪽으로 진행됩니다(유방향 비순환 그래프의 경우 화살표가 아래를 가리킴).

'Direction' — 계층 방향

'Sources' — 첫 번째 계층에 포함할 노드

'Sinks' — 마지막 계층에 포함할 노드

'AssignLayers' — 계층 할당 메서드

'subspace'

부분공간(Subspace)을 포함하는 레이아웃 [5]입니다. 그래프 노드를 고차원 부분공간에 플로팅한 후 위치를 2차원으로 다시 투영합니다. 기본적으로, 하위 공간 차원은 100 또는 노드의 총 개수 중 더 작은 값입니다.

'Dimension' — 포함된 부분공간의 차원

'force3'3차원 힘-방향(Force-directed) 레이아웃입니다.

'Iterations' — 힘-방향(Force-directed) 레이아웃 반복 횟수

'WeightEffect' — 간선 가중치가 레이아웃에 미치는 영향

'UseGravity' — 여러 성분을 갖는 레이아웃에 중력 적용 여부

'XStart' — 노드의 시작 x 좌표

'YStart' — 노드의 시작 y 좌표

'ZStart' — 노드의 시작 z 좌표

'subspace3'3차원 부분공간(Subspace)을 포함하는 레이아웃입니다.

'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)

모두 축소

힘-방향 레이아웃 반복 횟수로, 'Iterations'와 함께 양의 정수 스칼라가 쉼표로 구분되어 지정됩니다.

이 옵션은 method'force''force3'인 경우에만 사용할 수 있습니다.

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

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

간선 가중치가 레이아웃에 미치는 영향으로, 'WeightEffect'와 이 테이블의 값 중 하나가 쉼표로 구분되어 지정됩니다. (각 방향마다 간선을 하나씩 갖는 유방향 그래프 또는 다중 그래프와 같이) 두 노드 사이에 다중 간선이 있는 경우, '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®은 여러 성분을 갖는 그래프를 하나의 그리드에 표시합니다. 그리드에서 큰 성분과 작은 성분에 동일한 공간이 할당되기 때문에 큰 성분의 세부 정보가 가려질 수 있습니다. 'UseGravity''on' 또는 true로 설정하면 여러 성분이 원점을 중심으로 방사형으로 표시됩니다. 이 레이아웃에서는 성분이 보다 자연스럽게 분산되며, 큰 성분에는 상대적으로 큰 공간이 할당됩니다.

이 옵션은 method'force''force3'인 경우에만 사용할 수 있습니다.

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

데이터형: char | logical

노드의 시작 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

노드의 시작 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

노드의 시작 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' 중 하나가 쉼표로 구분되어 지정됩니다. DAG(유방향 비순환 그래프)의 경우, 화살표는 지정된 방향을 가리킵니다.

이 옵션은 method'layered'인 경우에만 사용할 수 있습니다.

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

첫 번째 계층에 포함할 노드로, 'Sources'와 함께 하나 이상의 노드 인덱스 또는 노드 이름이 쉼표로 구분되어 지정됩니다.

다음 표에서는 숫자형 노드 인덱스 또는 노드 이름을 사용하여 하나 이상의 노드를 참조하는 몇 가지 방법을 보여줍니다.

형식단일 노드여러 노드
노드 인덱스

스칼라

예: 1

벡터

예: [1 2 3]

노드 이름

문자형 벡터

예: 'A'

문자형 벡터로 구성된 셀형 배열

예: {'A' 'B' 'C'}

string형 스칼라

예: "A"

string형 배열

예: ["A" "B" "C"]

이 옵션은 method'layered'인 경우에만 사용할 수 있습니다.

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

마지막 계층에 포함할 노드로, 'Sinks'와 함께 하나 이상의 노드 인덱스 또는 노드 이름이 쉼표로 구분되어 지정됩니다.

이 옵션은 method'layered'인 경우에만 사용할 수 있습니다.

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

계층 할당 메서드로, 'AssignLayers'와 함께 다음 표에 나와 있는 옵션 중 하나가 쉼표로 구분되어 지정됩니다.

옵션설명
'auto'(디폴트 값)노드 할당은 'asap''alap' 중 더 간단한 형식을 사용합니다.
'asap'가능한 한 빨리(As soon as possible)입니다. 모든 선행 노드가 이전 계층에 있어야 한다는 제약 조건이 주어진 경우 각 노드가 첫 번째로 가능한 계층에 할당됩니다.
'alap'가능한 한 늦게(As late as possible)입니다. 모든 후행 노드가 이후 계층에 있어야 한다는 제약 조건이 주어진 경우 각 노드가 마지막으로 가능한 계층에 할당됩니다.

이 옵션은 method'layered'인 경우에만 사용할 수 있습니다.

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

부분공간

모두 축소

포함된 부분공간의 차원으로, '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' 레이아웃 메서드를 사용할 때는 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에 개발됨