NetworkX와 Matplotlib를 함께 사용하면 여러 개의 층(layer)으로 구성된 다중 분할 그래프(multipartite graph)를 손쉽게 생성하고 시각화할 수 있습니다. 다중 분할 그래프는 노드들이 서로 겹치지 않는 집합(subset)으로 나뉘고, 간선이 서로 다른 집합 사이에만 존재하는 그래프 구조입니다.
구현 절차
다중 분할 그래프를 만들기 위해 다음 단계를 따릅니다.
그림(figure) 크기를 설정하고, 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
각 층의 크기(subset sizes)와 색상 목록을 정의합니다.
다층 그래프 객체를 반환하는 함수를 작성합니다.
노드가 속한 층 정보를 기반으로 노드 색상을 지정합니다.
multipartite_layout을 사용해 노드를 직선 형태의 층별로 배치합니다.Matplotlib로 그래프 G를 그립니다.
x축과 y축의 비율을 동일하게 설정하여 그래프가 왜곡되지 않도록 합니다.
show()메서드를 호출해 그림을 화면에 표시합니다.
예제 코드
import itertools
import matplotlib.pyplot as plt
import networkx as nx
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
subset_sizes = [5, 5, 4, 3, 2, 4, 4, 3]
subset_color = [
"gold",
"violet",
"violet",
"violet",
"violet",
"limegreen",
"limegreen",
"darkorange",
]
def multilayered_graph(*subset_sizes):
extents = nx.utils.pairwise(itertools.accumulate((0,) + subset_sizes))
layers = [range(start, end) for start, end in extents]
G = nx.Graph()
for (i, layer) in enumerate(layers):
G.add_nodes_from(layer, layer=i)
for layer1, layer2 in nx.utils.pairwise(layers):
G.add_edges_from(itertools.product(layer1, layer2))
return G
G = multilayered_graph(*subset_sizes)
color = [subset_color[data["layer"]] for v, data in G.nodes(data=True)]
pos = nx.multipartite_layout(G, subset_key="layer")
nx.draw(G, pos, node_color=color, with_labels=False)
plt.axis("equal")
plt.show()
코드 설명
multilayered_graph 함수는 각 층의 크기를 인자로 받아 누적합을 계산한 뒤, 층별 노드 범위를 생성합니다. 이후 각 노드에 layer 속성을 부여하고, 인접한 두 층 사이의 모든 노드 쌍을 연결하는 간선을 추가합니다.
그래프가 완성되면 nx.multipartite_layout(G, subset_key="layer")를 호출하여 노드를 층별로 좌에서 우로 배치하고, 층 정보에 맞춰 노드 색상을 지정한 후 nx.draw()로 시각화합니다. 마지막으로 plt.axis("equal")을 통해 축 비율을 맞춰 그래프의 형태가 왜곡되지 않게 합니다.
실행 결과

실행하면 8개의 층으로 구성된 다중 분할 그래프가 층별로 다른 색상의 노드와 함께 표시됩니다. 이 방식은 네트워크 흐름, 계층 구조 분석, 신경망 아키텍처 표현 등 다양한 데이터 시각화에 활용할 수 있습니다.