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

NetworkX와 Matplotlib로 다중 분할 그래프(Multipartite Graph) 그리는 방법

NetworkXMatplotlib를 함께 사용하면 여러 개의 층(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")을 통해 축 비율을 맞춰 그래프의 형태가 왜곡되지 않게 합니다.

실행 결과

NetworkX와 Matplotlib로 다중 분할 그래프(Multipartite Graph) 그리는 방법

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