Main Content

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

이 예제에서는 그래프 노드와 간선에 레이블을 추가하고 사용자 지정하는 방법을 보여줍니다.

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

도시의 격자형 도로와 교차로를 나타낸 그래프를 만듭니다. 플롯에서 주 도로와 교차 도로가 서로 다르게 표시되도록 간선에 가중치를 추가합니다. 간선 너비가 간선의 가중치에 비례하도록 그래프를 플로팅합니다.

s = [1 1 2 2 3 4 4 5 5 6 7 7 8 8 9 10 11];
t = [2 4 3 5 6 5 7 6 8 9 8 10 9 11 12 11 12];
weights = [1 5 1 5 5 1 5 1 5 5 1 5 1 5 5 1 1];
G = graph(s,t,weights);
P = plot(G,'LineWidth',G.Edges.Weight);

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

노드 레이블 추가하기

노드가 100개 이하인 그래프의 경우, MATLAB®은 숫자형 노드 인덱스 또는 노드 이름을 사용하여 자동으로 노드에 레이블을 지정합니다(더 큰 그래프에서는 기본적으로 이러한 레이블을 생략함). 그러나 GraphPlot 객체 PNodeLabel 속성을 조정하거나 labelnode 함수를 사용하여 노드 레이블을 변경할 수 있습니다. 따라서 노드에 이름이 있어도 그 이름과 다른 레이블을 사용할 수 있습니다.

디폴트 숫자형 노드 레이블을 제거합니다. 교차로 중 하나의 레이블을 Home으로, 또 다른 레이블을 Work로 지정합니다.

labelnode(P,1:12,'')
labelnode(P,5,'Home')
labelnode(P,12,'Work')

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

간선 레이블 추가하기

플로팅된 그래프의 간선에는 자동으로 레이블이 지정되지 않습니다. GraphPlot 객체 PEdgeLabel 속성값을 변경하거나 labeledge 함수를 사용하여 간선 레이블을 추가할 수 있습니다.

뉴욕시의 도로에 간선 레이블을 추가해 보겠습니다. 그래프의 G.Edges 테이블에 간선의 순서가 정의되어 있기 때문에 레이블의 순서도 이 순서에 따라 지정해야 합니다. 간선 이름을 간선 정보 바로 옆에서 확인할 수 있도록 G.Edges 테이블에 직접 간선 레이블을 저장하는 것이 편리합니다.

G.Edges
ans=17×2 table
    EndNodes    Weight
    ________    ______

     1     2      1   
     1     4      5   
     2     3      1   
     2     5      5   
     3     6      5   
     4     5      1   
     4     7      5   
     5     6      1   
     5     8      5   
     6     9      5   
     7     8      1   
     7    10      5   
     8     9      1   
     8    11      5   
     9    12      5   
    10    11      1   
      ⋮

이 예제에는 17개의 간선이 있지만 고유한 도로 이름은 7개뿐입니다. 따라서 도로 이름을 셀형 배열로 정의한 다음 각 간선에 대해 원하는 도로 이름을 이 셀형 배열의 요소를 참조하여 가져올 수 있습니다. 도로 이름이 포함된 G.Edges 테이블에 변수를 추가해 보겠습니다.

streets = {'8th Ave' '7th Ave' '6th Ave' '5th Ave' ...
    'W 20th St' 'W 21st St' 'W 22nd St'}';
inds = [1 5 1 6 7 2 5 2 6 7 3 5 3 6 7 4 4];
G.Edges.StreetName = streets(inds);
G.Edges
ans=17×3 table
    EndNodes    Weight     StreetName  
    ________    ______    _____________

     1     2      1       {'8th Ave'  }
     1     4      5       {'W 20th St'}
     2     3      1       {'8th Ave'  }
     2     5      5       {'W 21st St'}
     3     6      5       {'W 22nd St'}
     4     5      1       {'7th Ave'  }
     4     7      5       {'W 20th St'}
     5     6      1       {'7th Ave'  }
     5     8      5       {'W 21st St'}
     6     9      5       {'W 22nd St'}
     7     8      1       {'6th Ave'  }
     7    10      5       {'W 20th St'}
     8     9      1       {'6th Ave'  }
     8    11      5       {'W 21st St'}
     9    12      5       {'W 22nd St'}
    10    11      1       {'5th Ave'  }
      ⋮

이러한 도로 이름을 참조할 수 있도록 EdgeLabel 속성을 업데이트합니다.

P.EdgeLabel = G.Edges.StreetName;

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

글꼴 속성 조정하기

그래프 플롯의 노드 레이블과 간선 레이블에는 레이블의 모양과 스타일을 제어하는 자체 속성이 있습니다. 속성들은 분리되어 있기 때문에 노드 레이블과 간선 레이블에 서로 다른 스타일을 사용할 수 있습니다.

노드 레이블의 경우 다음 속성을 조정할 수 있습니다.

  • NodeLabel

  • NodeLabelColor

  • NodeFontName

  • NodeFontSize

  • NodeFontWeight

  • NodeFontAngle

간선 레이블의 경우에는 다음 속성을 조정할 수 있습니다.

  • EdgeLabel

  • EdgeLabelColor

  • EdgeFontName

  • EdgeFontSize

  • EdgeFontWeight

  • EdgeFontAngle

뉴욕시의 도로를 다루는 이 예제에서 위의 속성들을 사용하여 다음과 같이 글꼴을 조정합니다.

  • 교차로 레이블의 글꼴과 색이 12pt. 및 빨간색이 되도록 NodeFontSizeNodeLabelColor를 변경합니다.

  • 한 방향의 도로에는 더 크고 굵은 글꼴을, 반대 방향의 도로에는 더 작은 기울임꼴을 사용하도록 EdgeFontWeight, EdgeFontAngle, EdgeFontSize를 변경합니다.

  • 간선 레이블에 Times New Roman 글꼴을 사용하도록 EdgeFontName을 변경합니다.

highlight 함수를 사용하여 일부 그래프 간선의 그래프 속성을 변경할 수 있습니다. 간선 레이블에 단어 'Ave'가 포함된 경우 true인 논리형 인덱스 isAvenue를 생성해 보겠습니다. 이 논리형 벡터를 highlight에 대한 입력값으로 사용하면 한 방향에서 Avenues가 포함된 모든 도로와 반대 방향에서 Avenues가 포함되지 않은 모든 도로에 레이블이 지정됩니다.

P.NodeFontSize = 12;
P.NodeLabelColor = 'r';
isAvenue = contains(P.EdgeLabel, 'Ave');
highlight(P, 'Edges', isAvenue, 'EdgeFontAngle', 'italic', 'EdgeFontSize', 7);
highlight(P, 'Edges', ~isAvenue, 'EdgeFontWeight', 'bold', 'EdgeFontSize', 10);
P.EdgeFontName = 'Times New Roman';

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

간선 강조 표시하기

Home 노드와 Work 노드 사이의 최단 경로를 찾고 이 경로에 어떤 도로가 있는지 확인합니다. 경로에 있는 노드와 간선을 빨간색으로 강조 표시하고 경로에 없는 모든 간선의 간선 레이블을 제거합니다.

[path,d,pathEdges] = shortestpath(G,5,12)
path = 1×4

     5     6     9    12

d = 11
pathEdges = 1×3

     8    10    15

G.Edges.StreetName(pathEdges,:)
ans = 3x1 cell
    {'7th Ave'  }
    {'W 22nd St'}
    {'W 22nd St'}

highlight(P,'Edges',pathEdges,'EdgeColor','r')
highlight(P,path,'NodeColor','r')
labeledge(P, setdiff(1:numedges(G), pathEdges), '')

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

참고 항목

관련 항목