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

Matplotlib에서 for 루프로 여러 플롯을 애니메이션으로 정의하는 방법

Matplotlib에서 for 루프를 사용해 여러 개의 플롯을 애니메이션으로 정의하려면 다음 단계를 따르면 됩니다.

  • 그림(figure) 크기를 설정하고 서브플롯 사이와 주변의 여백(padding)을 조정합니다.
  • figure() 메서드를 사용해 새 그림을 생성하거나 기존 그림을 활성화합니다.
  • 현재 그림에 축(axes)을 추가하고 이를 현재 축으로 지정합니다.
  • NumPy를 사용해 두 변수 Nx를 초기화합니다.
  • 선(line) 객체 목록과 막대(bar) 패치(patch)를 가져옵니다.
  • for 루프 안에서 선과 사각형(막대 패치)을 애니메이션 처리합니다.
  • 함수 func를 반복적으로 호출하여 애니메이션을 생성합니다.
  • 마지막으로 show() 메서드를 사용해 그림을 화면에 표시합니다.

예제 코드

from matplotlib import pyplot as plt
from matplotlib import animation
import numpy as np

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

fig = plt.figure()
ax = plt.axes(xlim=(0, 2), ylim=(0, 100))
N = 4
x = np.linspace(-5, 5, 100)
lines = [plt.plot(x, np.sin(x))[0] for _ in range(N)]
rectangles = plt.bar([0.5, 1, 1.5], [50, 40, 90], width=0.1)
patches = lines + list(rectangles)

def animate(i):
    for j, line in enumerate(lines):
        line.set_data([0, 2, i, j], [0, 3, 10 * j, i])
    for j, rectangle in enumerate(rectangles):
        rectangle.set_height(i / (j + 1))
    return patches

anim = animation.FuncAnimation(fig, animate,
                               frames=100, interval=20, blit=True)

plt.show()

실행 결과

위 코드를 실행하면 4개의 선 그래프가 각 프레임마다 데이터가 갱신되며 움직이고, 동시에 3개의 막대 그래프도 높이가 프레임 인덱스에 따라 변화하는 애니메이션이 출력됩니다.

Matplotlib에서 for 루프로 여러 플롯을 애니메이션으로 정의하는 방법

핵심 포인트 정리

이 예제의 핵심은 animate(i) 함수 내부에서 for 루프를 활용해 여러 아티스트(artist) 객체를 한 번에 업데이트한다는 점입니다. lines 리스트의 각 선은 set_data()로 좌표를 갱신하고, 막대 패치는 set_height()로 높이를 변경한 후 전체 패치 목록을 반환합니다. 반환된 패치들은 FuncAnimationblit=True 옵션과 함께 사용되어 변경된 부분만 다시 그려지므로, 여러 플롯을 동시에 애니메이션할 때도 높은 성능을 유지할 수 있습니다.