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()
실행 결과

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