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

NetworkX와 Matplotlib으로 그래프 속성을 변경하는 방법

NetworkXMatplotlib을 함께 사용하면 그래프를 시각화할 때 엣지(간선)의 색상이나 두께 같은 다양한 속성을 자유롭게 변경할 수 있습니다. 이 글에서는 그래프 도면의 속성을 변경하는 전체 과정을 단계별로 살펴보겠습니다.

구현 단계

  • 그림 크기(figure size)를 설정하고, 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.

  • 엣지, 이름 또는 그래프 속성을 포함하여 그래프를 초기화합니다.

  • 그래프에 속성을 추가하고, uv 사이에 엣지를 연결합니다.

  • nx.get_edge_attributes() 메서드를 사용해 그래프에서 엣지 속성(색상, 가중치)을 가져옵니다.

  • nx.circular_layout()을 사용해 노드를 원형으로 배치합니다.

  • Matplotlib의 nx.draw() 함수로 그래프 G를 그립니다.

  • 그림을 화면에 표시하려면 show() 메서드를 호출합니다.

예제 코드

import matplotlib.pyplot as plt
import networkx as nx

plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True

G = nx.Graph()
G.add_edge(0, 1, color='r', weight=2)
G.add_edge(1, 2, color='g', weight=4)
G.add_edge(2, 3, color='b', weight=6)
G.add_edge(3, 4, color='y', weight=3)
G.add_edge(4, 0, color='m', weight=1)

colors = nx.get_edge_attributes(G, 'color').values()
weights = nx.get_edge_attributes(G, 'weight').values()
pos = nx.circular_layout(G)

nx.draw(G, pos,
    edge_color=colors,
    width=list(weights),
    with_labels=True,
    node_color='lightgreen')

plt.show()

코드 설명

위 예제에서는 각 엣지를 추가할 때 colorweight 속성을 함께 지정했습니다. 빨강(r), 초록(g), 파랑(b), 노랑(y), 마젠타(m)의 다섯 가지 색상이 엣지마다 다르게 적용되며, 가중치 값은 엣지의 두께(width)로 표현됩니다. nx.get_edge_attributes()는 그래프에 저장된 속성값을 딕셔너리 형태로 반환하므로, .values()를 통해 색상과 두께 목록을 손쉽게 추출할 수 있습니다.

실행 결과

위 코드를 실행하면 다음과 같은 출력 결과를 얻을 수 있습니다.

NetworkX와 Matplotlib으로 그래프 속성을 변경하는 방법

결과 그래프를 보면 노드가 원형으로 배치되어 있고, 각 엣지가 서로 다른 색상과 두께로 렌더링된 것을 확인할 수 있습니다. 이처럼 엣지 단위로 속성을 지정하면 네트워크 데이터의 특성을 한눈에 파악하기 쉬운 시각화를 만들 수 있습니다.