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

Matplotlib 업데이트 함수로 NetworkX 그래프 애니메이션 구현하기

Matplotlib에서 업데이트(update) 함수를 활용해 NetworkX 그래프에 애니메이션 효과를 적용하려면 다음 단계를 따르면 됩니다.

  • 그림(figure) 크기를 설정하고 서브플롯 사이와 주변의 여백을 조정합니다.
  • figure() 메서드를 사용해 새 그림을 생성하거나 기존 그림을 활성화합니다.
  • 간선(edge), 이름, 그래프 속성을 포함하여 그래프를 초기화합니다.
  • add_nodes_from() 메서드로 그래프에 노드를 추가합니다.
  • Matplotlib으로 그래프 G를 화면에 그립니다.
  • FuncAnimation() 클래스를 사용해 animate 함수를 반복적으로 호출하는 방식으로 애니메이션을 생성합니다.
  • animate 함수는 현재 그림을 지운 뒤 두 개의 난수를 생성하고, 해당 노드 사이에 간선을 추가해 그래프를 다시 그립니다.
  • 완성된 그림을 표시하려면 show() 메서드를 호출합니다.

여기서 핵심 역할을 하는 것은 Matplotlib의 FuncAnimation입니다. 이 클래스는 지정한 프레임 수만큼 콜백 함수를 반복 실행하며, 매 프레임마다 그림을 다시 그려 동적인 시각화를 만들어 줍니다. 아래 예제에서는 0부터 4까지의 노드로 구성된 방향 그래프(DiGraph)를 만들고, 매 프레임마다 무작위로 선택된 두 노드 사이에 간선을 하나씩 추가하면서 그래프가 점진적으로 변화하는 모습을 보여줍니다.

예제 코드

from matplotlib import pyplot as plt, animation
import networkx as nx
import random

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

fig = plt.figure()

G = nx.DiGraph()
G.add_nodes_from([0, 1, 2, 3, 4])

nx.draw(G, with_labels=True)

def animate(frame):
    fig.clear()
    num1 = random.randint(0, 4)
    num2 = random.randint(0, 4)
    G.add_edges_from([(num1, num2)])
    nx.draw(G, with_labels=True)

ani = animation.FuncAnimation(fig, animate, frames=6, interval=1000, repeat=True)

plt.show()

코드 설명

  • frames=6: 애니메이션이 총 6개의 프레임으로 구성됨을 의미합니다.
  • interval=1000: 각 프레임 사이의 간격을 1000밀리초(1초)로 설정합니다.
  • repeat=True: 애니메이션이 끝난 후 처음부터 반복 재생됩니다.
  • fig.clear(): 매 프레임마다 기존 그림을 지워 잔상이 남지 않도록 합니다.

실행 결과

Matplotlib 업데이트 함수로 NetworkX 그래프 애니메이션 구현하기

코드를 실행하면 노드 0~4로 이루어진 그래프에 매 초마다 무작위 간선이 하나씩 추가되며, 그래프 구조가 점차 확장되는 애니메이션을 확인할 수 있습니다. 이 방식을 응용하면 실시간 데이터 변화나 네트워크 성장 과정을 직관적으로 시각화할 수 있습니다.