Matplotlib에서 pcolormesh를 애니메이션으로 표현하고 싶다면 다음 단계를 따라 진행하면 됩니다.
구현 단계
그림(figure)과 서브플롯(subplots) 세트를 생성합니다.
numpy를 사용하여 x, y, t 데이터 포인트를 생성합니다.
meshgrid를 사용하여 좌표 벡터로부터 좌표 행렬 X3, Y3, T3를 반환받습니다.
pcolormesh() 메서드를 사용하여 비정규 사각형 그리드 기반의 유사 컬러(pseudocolor) 플롯을 생성합니다.
colormesh 축에 컬러바(colorbar)를 추가합니다.
FuncAnimation() 클래스 메서드를 사용하여 pcolormesh를 애니메이션으로 만듭니다.
그림을 화면에 표시하려면 show() 메서드를 호출합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt, animation
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
x = np.linspace(-3, 3, 91)
t = np.linspace(0, 25, 30)
y = np.linspace(-3, 3, 91)
X3, Y3, T3 = np.meshgrid(x, y, t)
sinT3 = np.sin(2 * np.pi * T3 / T3.max(axis=2)[..., np.newaxis])
G = (X3 ** 2 + Y3 ** 2) * sinT3
cax = ax.pcolormesh(x, y, G[:-1, :-1, 0], vmin=-1, vmax=1, cmap='Blues')
fig.colorbar(cax)
def animate(i):
cax.set_array(G[:-1, :-1, i].flatten())
anim = animation.FuncAnimation(fig, animate, interval=100, frames=len(t) - 1)
anim.save('517.gif')
plt.show()코드 설명
위 코드의 핵심 동작 방식은 다음과 같습니다.
데이터 생성:
np.linspace로 x, y, t 축의 값을 균일하게 나누어 생성한 뒤,np.meshgrid로 3차원 좌표 행렬을 만듭니다.파동 계산: 시간축 T3에 따른 사인파를 계산하고, 이를 x² + y² 값과 곱하여 각 프레임마다 변화하는 2차원 파동 데이터 G를 얻습니다.
애니메이션 핵심:
animate(i)함수에서cax.set_array()를 호출해 i번째 프레임의 데이터 배열만 교체합니다. 이렇게 하면 매번 새로운 플롯을 그리지 않고도 성능 저하 없이 부드러운 애니메이션을 구현할 수 있습니다.GIF 저장:
anim.save('517.gif')를 통해 완성된 애니메이션을 GIF 파일로 저장할 수 있습니다.
실행 결과
코드를 실행하면 시간에 따라 파동이 움직이는 애니메이션이 생성되며, Blues 컬러맵으로 색상이 표현된 pcolormesh 그래프가 프레임마다 업데이트되는 것을 확인할 수 있습니다.