Main Content

그래프 플로팅과 사용자 지정

이 예제에서는 그래프를 플로팅한 후 표시를 사용자 지정하여 레이블을 추가하거나 그래프 노드와 그래프 간선을 강조 표시하는 방법을 보여줍니다.

그래프 플로팅 객체

plot 함수를 사용하여 graph 객체와 digraph 객체를 플로팅합니다. 기본적으로, plot은 그래프의 크기와 유형을 검토하여 사용할 레이아웃을 확인합니다. 결과로 나타나는 Figure 창에는 좌표축 눈금이 없습니다. 그러나 XData, YData 또는 ZData 이름-값 쌍을 사용하여 노드의 (x,y) 좌표를 지정하면 Figure에 좌표축 눈금이 표시됩니다.

노드가 100개 이하인 그래프의 플롯에는 노드 레이블이 자동으로 포함됩니다. 노드 이름이 존재하면 그 이름을 노드 레이블로 사용하고, 그렇지 않으면 숫자형 노드 인덱스를 노드 레이블로 사용합니다.

예를 들어, 버키 볼(Bucky Ball) 인접 행렬을 사용하여 그래프를 만든 후 모든 디폴트 옵션을 사용하여 그래프를 플로팅합니다. plot을 호출하고 출력 인수를 지정하면 함수가 GraphPlot 객체에 대한 핸들을 반환합니다. 나중에, 이 객체를 사용하여 플롯의 속성을 조정할 수 있습니다. 예를 들어, 간선의 색이나 스타일, 노드의 크기와 색 등을 변경할 수 있습니다.

G = graph(bucky);
p = plot(G)

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

p = 
  GraphPlot with properties:

     NodeColor: [0 0.4470 0.7410]
    MarkerSize: 4
        Marker: 'o'
     EdgeColor: [0 0.4470 0.7410]
     LineWidth: 0.5000
     LineStyle: '-'
     NodeLabel: {1x60 cell}
     EdgeLabel: {}
         XData: [0.1033 1.3374 2.2460 1.3509 0.0019 -1.0591 -2.2901 -2.8275 -1.9881 -0.8836 1.5240 0.4128 0.6749 1.9866 2.5705 3.3263 3.5310 3.9022 3.8191 3.5570 1.5481 2.6091 1.7355 0.4849 0.2159 -1.3293 -1.2235 -2.3934 -3.3302 ... ] (1x60 double)
         YData: [-1.8039 -1.2709 -2.0484 -3.0776 -2.9916 -0.9642 -1.2170 0.0739 1.0849 0.3856 0.1564 0.9579 2.2450 2.1623 0.8879 -1.2600 0.0757 0.8580 -0.4702 -1.8545 -3.7775 -2.9634 -2.4820 -3.0334 -3.9854 -3.2572 -3.8936 -3.1331 ... ] (1x60 double)
         ZData: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

  Use GET to show all properties

GraphPlot 객체에 대한 핸들을 가져온 후에는 점 인덱싱을 사용하여 속성값에 액세스하거나 변경합니다. 조정할 수 있는 속성의 전체 목록은 GraphPlot 속성 항목을 참조하십시오.

NodeColor의 값을 'red'로 변경합니다.

p.NodeColor = 'red';

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

간선의 선 너비를 확인합니다.

p.LineWidth
ans = 0.5000

그래프를 만들고 플로팅하기

한 변이 12개 노드로 구성된 정사각 그리드에서 생성된 L 모양의 멤브레인을 나타내는 그래프를 만들고 플로팅합니다. plot에 출력 인수를 지정하여 GraphPlot 객체에 대한 핸들을 반환합니다.

n = 12;
A = delsq(numgrid('L',n));
G = graph(A,'omitselfloops')
G = 
  graph with properties:

    Edges: [130x2 table]
    Nodes: [75x0 table]

p = plot(G)

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

p = 
  GraphPlot with properties:

     NodeColor: [0 0.4470 0.7410]
    MarkerSize: 4
        Marker: 'o'
     EdgeColor: [0 0.4470 0.7410]
     LineWidth: 0.5000
     LineStyle: '-'
     NodeLabel: {1x75 cell}
     EdgeLabel: {}
         XData: [-2.5225 -2.1251 -1.6498 -1.1759 -0.7827 -2.5017 -2.0929 -1.6027 -1.1131 -0.7069 -2.4678 -2.0495 -1.5430 -1.0351 -0.6142 -2.4152 -1.9850 -1.4576 -0.9223 -0.4717 -2.3401 -1.8927 -1.3355 -0.7509 -0.2292 -2.2479 -1.7828 ... ] (1x75 double)
         YData: [-3.5040 -3.5417 -3.5684 -3.5799 -3.5791 -3.0286 -3.0574 -3.0811 -3.0940 -3.0997 -2.4191 -2.4414 -2.4623 -2.4757 -2.4811 -1.7384 -1.7570 -1.7762 -1.7860 -1.7781 -1.0225 -1.0384 -1.0553 -1.0568 -1.0144 -0.2977 -0.3097 ... ] (1x75 double)
         ZData: [0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0]

  Use GET to show all properties

그래프 노드 레이아웃 변경하기

layout 함수를 사용하여 플롯의 그래프 노드 레이아웃을 변경합니다. 여러 가지 레이아웃 옵션이 플롯의 노드 좌표를 자동으로 계산합니다. 또는 GraphPlot 객체의 XData, YData, ZData 속성을 사용하여 자신만의 고유한 노드 좌표를 지정할 수 있습니다.

디폴트 2차원 레이아웃 메서드를 사용하는 대신, layout'force3'을 지정하여 3차원 힘-방향 레이아웃을 지정할 수도 있습니다.

layout(p,'force3')
view(3)

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

부분별 노드 색 지정하기

차수를 기준으로 그래프 노드의 색을 지정합니다. 이 그래프에서 모든 내부 노드의 최대 차수는 4로 동일하며, 그래프 경계를 따라 있는 노드의 차수는 3이고, 코너 노드의 최소 차수는 2입니다. 이 노드 색 지정 데이터를 G.Nodes에 변수 NodeColors로 저장합니다.

G.Nodes.NodeColors = degree(G);
p.NodeCData = G.Nodes.NodeColors;
colorbar

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

가중치를 기준으로 하는 간선 너비

일부 임의 정수 가중치를 그래프 간선에 추가한 후 해당 선 너비가 가중치에 비례하는 간선을 플로팅합니다. 대략적으로 7보다 큰 간선 너비는 복잡해질 수 있으므로, 가장 큰 가중치를 가지는 간선의 선 너비가 7이 되도록 선 너비를 스케일링합니다. 이 간선 너비 데이터를 G.Edges에 변수 LWidths로 저장합니다.

G.Edges.Weight = randi([10 250],130,1);
G.Edges.LWidths = 7*G.Edges.Weight/max(G.Edges.Weight);
p.LineWidth = G.Edges.LWidths;

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

부분 그래프 추출하기

G의 오른쪽 상단 코너를 부분 그래프로 추출하고 플로팅하여 그래프의 세부 정보를 더 읽기 쉽게 만듭니다. 새 그래프 HG에서 NodeColors 변수와 LWidths 변수를 상속하므로 이전 플롯의 사용자 지정 설정을 다시 생성하는 작업은 매우 간단합니다. 그러나, 그래프의 새 노드 개수를 고려하여 H에 포함된 노드의 번호가 다시 지정됩니다.

H = subgraph(G,[1:31 36:41]);
p1 = plot(H,'NodeCData',H.Nodes.NodeColors,'LineWidth',H.Edges.LWidths);
colorbar

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

노드와 간선에 레이블 지정하기

labeledge를 사용하여 너비가 6보다 큰 간선에 레이블 'Large'를 지정합니다. labelnode 함수는 노드에 레이블을 지정하는 것과 유사한 방법으로 동작합니다.

labeledge(p1,find(H.Edges.LWidths > 6),'Large')

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

최단 경로 강조 표시하기

부분 그래프 H에서 노드 11과 노드 37 사이의 최단 경로를 구합니다. 이 경로에 있는 간선을 빨간색으로 강조 표시하고 경로의 끝 노드 크기를 늘립니다.

path = shortestpath(H,11,37)
path = 1×10

    11    12    17    18    19    24    25    30    36    37

highlight(p1,[11 37])
highlight(p1,path,'EdgeColor','r')

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

노드 레이블과 컬러바를 제거하고 모든 노드를 검은색으로 설정합니다.

p1.NodeLabel = {};
colorbar off
p1.NodeColor = 'black';

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

간선 가중치를 무시하는 다른 최단 경로를 구합니다. 이 경로를 녹색으로 강조 표시합니다.

path2 = shortestpath(H,11,37,'Method','unweighted')
path2 = 1×10

    11    12    13    14    15    20    25    30    31    37

highlight(p1,path2,'EdgeColor','g')

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

크기가 큰 그래프 플로팅하기

수십만 개 또는 수백만 개의 노드 및/또는 간선을 가지는 그래프를 생성하는 것은 흔한 일입니다. 이러한 이유로, plot은 가독성과 성능을 유지하기 위해 크기가 큰 그래프를 약간 다르게 처리합니다. plot 함수는 100개가 넘는 노드를 가지는 그래프로 작업할 때 다음과 같은 조정 작업을 수행합니다.

  1. 디폴트 그래프 레이아웃 메서드는 항상 'subspace'입니다.

  2. 노드에 더 이상 자동으로 레이블이 지정되지 않습니다.

  3. MarkerSize 속성이 2으로 설정됩니다. 이보다 작은 그래프의 마커 크기는 4입니다.

  4. 유방향 그래프의 ArrowSize 속성이 4로 설정됩니다. 이보다 작은 유방향 그래프의 경우 화살표 크기로 7을 사용합니다.

참고 항목

| | |

관련 항목