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

Matplotlib에서 pcolormesh 애니메이션 구현하는 방법

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 그래프가 프레임마다 업데이트되는 것을 확인할 수 있습니다.