데이터 시각화에서 산점도(scatter plot) 애니메이션은 시간에 따른 데이터의 변화를 직관적으로 보여주는 강력한 도구입니다. Python의 matplotlib 라이브러리를 활용하면 산점도 애니메이션을 손쉽게 만들고 .gif 파일로 저장할 수 있습니다.
아래 단계별 과정과 전체 예제 코드를 통해 그 방법을 자세히 알아보겠습니다.
산점도 애니메이션 저장 절차
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
steps(프레임 수),nodes(노드 수),positions(위치),solutions(값) 네 가지 변수를 초기화합니다.- 반복문을 사용하여 각 프레임의 위치와 값 데이터를 리스트에 추가합니다.
plt.subplots()으로 그림과 서브플롯을 생성합니다.- 마커(marker) 크기 변수를 초기화합니다.
ax.grid()로 격자선(grid line)을 설정합니다.FuncAnimation을 이용해 animate 함수를 반복 호출하여 축을 초기화하고, 새로운 서브플롯을 추가한 뒤 해당 축에 산점도를 그립니다.- 완성된 애니메이션 산점도를 .gif 파일로 저장합니다.
전체 예제 코드
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
# 그림 크기 및 자동 레이아웃 설정
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
steps = 50 # 프레임 수
nodes = 100 # 노드(점) 수
positions = [] # 위치 데이터 저장 리스트
solutions = [] # 색상 값 저장 리스트
# 각 프레임별 무작위 데이터 생성
for i in range(steps):
positions.append(np.random.rand(2, nodes))
solutions.append(np.random.random(nodes))
fig, ax = plt.subplots()
marker_size = 50 # 마커 크기
# 애니메이션 프레임을 그리는 함수
def animate(i):
fig.clear()
ax = fig.add_subplot(111, aspect='equal', autoscale_on=False,
xlim=(0, 1), ylim=(0, 1))
ax.set_xlim(0, 1)
ax.set_ylim(0, 1)
s = ax.scatter(positions[i][0], positions[i][1], s=marker_size,
c=solutions[i], cmap="RdBu_r", marker="o",
edgecolor='black')
ax.grid(b=None)
# FuncAnimation으로 애니메이션 생성
ani = animation.FuncAnimation(fig, animate, interval=100,
frames=range(steps))
# GIF 파일로 저장
ani.save('animation.gif', writer='pillow')코드 핵심 포인트
1. 데이터 준비
np.random.rand()와 np.random.random()을 사용해 각 프레임마다 노드의 x, y 좌표와 색상 값을 무작위로 생성합니다. 실제 프로젝트에서는 시뮬레이션 결과나 센서 데이터 등 원하는 데이터로 대체할 수 있습니다.
2. animate 함수
animate(i) 함수는 프레임 인덱스 i를 인자로 받으며, 매 프레임마다 fig.clear()로 기존 그림을 지운 후 새로운 서브플롯을 추가하고 해당 프레임의 산점도를 다시 그립니다.
3. FuncAnimation과 저장
interval=100은 프레임 간 간격을 100ms로 지정하며, writer='pillow'를 사용해 Pillow 이미지 라이브러리로 GIF 파일을 인코딩합니다. 참고로 ax.grid(b=None)의 b 파라미터는 최신 matplotlib 버전에서 deprecated되었으므로, 최신 버전을 사용한다면 ax.grid(visible=None) 또는 생략하는 것이 좋습니다.
실행 결과
코드를 실행하면 작업 디렉터리에 animation.gif 파일이 생성되며, 빨강-파랑(RdBu_r) 컬러맵이 적용된 산점도 점들이 프레임마다 무작위로 움직이는 애니메이션을 확인할 수 있습니다.