파이썬의 Matplotlib 라이브러리를 사용하면 퀴버(quiver) 플롯, 즉 화살표로 표현되는 2차원 벡터장을 손쉽게 시각화할 수 있습니다. 여기에 animation 모듈을 더하면 벡터의 크기와 방향, 색상이 실시간으로 변하는 애니메이션도 만들 수 있습니다.
애니메이션 퀴버 플롯 작성 순서
- 그림(figure) 크기를 설정하고 서브플롯 주변과 사이의 여백(padding)을 조정합니다.
- NumPy를 이용해 x, y 데이터 포인트를 생성합니다.
- 마찬가지로 NumPy를 이용해 각 지점의 벡터 성분인 u, v 데이터를 생성합니다.
- 그림과 서브플롯 세트를 생성합니다.
- quiver() 메서드를 사용해 2차원 화살표 필드를 그립니다.
- 애니메이션을 구현하려면 animate() 함수 안에서 프레임 번호(num)에 따라 u와 v 값을 갱신하고,
set_UVC()로 벡터 데이터를 업데이트한 뒤set_color()로 화살표 색상도 함께 변경합니다. - 마지막으로 show() 메서드로 결과 그림을 화면에 표시합니다.
예제 코드
import numpy as np
import random as rd
from matplotlib import pyplot as plt, animation
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x, y = np.mgrid[:2 * np.pi:10j, :2 * np.pi:5j]
u = np.cos(x)
v = np.sin(y)
fig, ax = plt.subplots(1, 1)
qr = ax.quiver(x, y, u, v, color='red')
def animate(num, qr, x, y):
u = np.cos(x + num * 0.1)
v = np.sin(y + num * 0.1)
qr.set_UVC(u, v)
qr.set_color((rd.random(), rd.random(), rd.random(), rd.random()))
return qr,
anim = animation.FuncAnimation(fig, animate, fargs=(qr, x, y),
interval=50, blit=False)
plt.show()코드 설명
np.mgrid[:2*np.pi:10j, :2*np.pi:5j]는 0부터 2π까지의 범위를 x축 방향으로 10개, y축 방향으로 5개의 격자점으로 나누어 좌표 배열을 만듭니다. 초기 벡터 성분은 u = cos(x), v = sin(y)로 정의됩니다.
애니메이션의 핵심은 FuncAnimation입니다. 이 함수는 일정한 간격(interval=50ms)마다 animate()를 호출하며, 호출될 때마다 위상(phase)인 num * 0.1만큼 코사인·사인 함수를 이동시켜 새로운 u, v 값을 계산합니다. 이후 set_UVC()로 기존 퀴버 객체의 벡터를 교체하고, random 모듈로 생성한 무작위 RGBA 값으로 화살표 색상을 매 프레임마다 바꿔줍니다.
실행하면 빨간색 화살표들이 물결치듯 회전하며 움직이고, 매 프레임마다 색상이 무작위로 변하는 애니메이션이 출력 창에 나타납니다.