Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Python3에서 NetworkX와 Matplotlib로 곡선 엣지 만들기

Python3의 NetworkX 라이브러리를 사용해 그래프를 시각화할 때, 노드 사이를 잇는 엣지(edge)를 단순한 직선이 아닌 곡선 형태로 표현하고 싶은 경우가 있습니다. 이때는 nx.draw() 함수에 connectionstyle="arc3, rad=0.4" 옵션을 지정하기만 하면 손쉽게 구현할 수 있습니다.

rad 값은 곡선의 휘어짐 정도를 결정합니다. 값이 커질수록 엣지가 더 많이 휘어지고, 음수 값을 사용하면 반대 방향으로 휘어집니다. 특히 두 노드 사이에 양방향 엣지가 존재하는 유향 그래프(DiGraph)에서 곡선을 활용하면 화살표가 겹치는 문제를 깔끔하게 해결할 수 있어 매우 유용합니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 자동으로 조정합니다.
  • nx.DiGraph()로 유향 그래프 객체를 생성합니다.
  • 생성된 그래프에 노드를 추가합니다.
  • 노드와 노드 사이를 연결하는 엣지를 추가합니다.
  • nx.draw() 함수로 그래프를 그릴 때 connectionstyle="arc3,rad=0.4" 옵션을 적용해 곡선 엣지를 만듭니다.
  • plt.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()

pos = nx.spring_layout(G)
G.add_nodes_from([1, 2, 3, 4])
G.add_edges_from([(1, 2), (2, 4), (2, 3), (4, 1)])

# 곡선 엣지 스타일 적용하여 그리기
nx.draw(G, with_labels=True, connectionstyle="arc3,rad=0.4")

plt.show()

실행 결과

Python3에서 NetworkX와 Matplotlib로 곡선 엣지 만들기

코드를 실행하면 위 그림과 같이 노드 1 → 2 → 4 → 1로 이어지는 엣지가 부드러운 호(arc) 형태의 곡선으로 표현되는 것을 확인할 수 있습니다. rad 값을 0.2, 0.6 등 다양하게 바꿔가며 실험해 보면 원하는 곡률을 쉽게 찾을 수 있습니다.