NetworkX 그래프에서 에지(edge) 레이블의 위치나 표시 형식을 사용자 정의하려면 nx.draw_networkx_edge_labels() 함수를 활용할 수 있습니다. 특히 label_pos 매개변수(기본값 0.5)를 조절하면 레이블이 에지 선분 위의 어느 지점에 배치될지 자유롭게 지정할 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- 에지, 이름 또는 그래프 속성을 포함하여 그래프를 초기화합니다.
- 여러 개의 노드를 추가합니다.
- Fruchterman-Reingold 힘 기반(force-directed) 알고리즘을 사용해 노드의 위치를 계산합니다.
- Matplotlib로 그래프 G를 그립니다.
- 에지 레이블을 그립니다.
- show() 메서드로 최종 그림을 화면에 표시합니다.
예제 코드
import matplotlib.pylab as plt
import networkx as nx
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
G = nx.DiGraph()
G.add_nodes_from([1, 2, 3, 4])
G.add_edges_from([(1, 2), (2, 3), (3, 4), (4, 1), (1, 3)])
pos = nx.spring_layout(G)
for u, v, d in G.edges(data=True):
d['weight'] = 3
edges, weights = zip(*nx.get_edge_attributes(G, 'weight').items())
nx.draw(G, pos, node_color='b', edge_color=weights,
width=2, with_labels=True)
nx.draw_networkx_edge_labels(
G, pos,
{
(1, 2): "x", (2, 3): "y", (3, 4): "w",
(4, 1): "z", (1, 3): "v"
},
label_pos=0.75
)
plt.show()
코드 설명
nx.DiGraph()로 방향 그래프를 생성한 뒤, 노드 4개와 에지 5개를 추가합니다.nx.spring_layout(G)는 Fruchterman-Reingold 알고리즘 기반으로 각 노드의 좌표를 계산하여 시각적으로 보기 좋은 배치를 만들어 줍니다.- 모든 에지에
weight속성을 부여하고, 이를edge_color로 전달해 에지 색상을 통일감 있게 표현합니다. nx.draw_networkx_edge_labels()에 딕셔너리 형태로 {(출발 노드, 도착 노드): 레이블} 쌍을 전달하면 원하는 텍스트가 각 에지에 표시됩니다.label_pos=0.75는 레이블을 에지 선분상 75% 지점에 배치하라는 의미로, 값이 커질수록 레이블이 출발 노드 쪽으로 이동합니다.
실행 결과
위 코드를 실행하면 파란색 노드로 구성된 방향 그래프가 그려지며, 각 에지 위에 "x", "y", "w", "z", "v"라는 사용자 정의 레이블이 나타납니다. label_pos 값을 0과 1 사이에서 조정하면서 레이블 위치가 어떻게 변하는지 확인해 보면, 그래프 시각화에서 가독성을 높이는 데 큰 도움이 됩니다.