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

Matplotlib 애니메이션으로 플롯 제목을 동적으로 업데이트하는 방법

Matplotlib에서 애니메이션 기능을 활용하면 플롯의 제목이나 텍스트를 프레임마다 동적으로 변경할 수 있습니다. 이 글에서는 animation.FuncAnimation을 사용해 플롯 위의 텍스트를 반복적으로 업데이트하는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 조정합니다.
  • figure() 메서드를 사용해 새 그림을 생성하거나 기존 그림을 활성화합니다.
  • NumPy를 이용해 x, y 데이터 포인트를 생성합니다.
  • gca() 메서드로 현재 축(axis) 객체를 가져옵니다.
  • text() 메서드를 사용해 축에 텍스트를 추가합니다.
  • 함수를 반복 호출하여 애니메이션을 만드는 animate() 메서드를 정의합니다.
  • show() 메서드로 그림을 화면에 표시합니다.

예제 코드

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

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

fig = plt.figure()

x = np.linspace(-10, 10, 1000)
y = np.sin(x)

plt.plot(x, y)

ax = plt.gca()
ax.text(0.5, 1.100, "y=sin(x)", bbox={'facecolor': 'red',
                                     'alpha': 0.5, 'pad': 5},
        transform=ax.transAxes, ha="center")

def animate(frame):
    ax.texts.clear()  # 기존 텍스트 제거로 겹침 방지
    ax.text(0.5, 1.100, "y=sin(x), frame: %d" % frame,
            bbox={'facecolor': 'red', 'alpha': 0.5, 'pad': 5},
            transform=ax.transAxes, ha="center")

ani = animation.FuncAnimation(fig, animate, interval=100,
                              frames=10, repeat=True)

plt.show()

코드 설명

위 코드는 -10부터 10까지의 범위에서 사인 곡선(y=sin(x))을 먼저 그립니다. 그런 다음 축 상단에 빨간색 배경의 텍스트 상자를 배치하고, animate() 함수가 프레임 번호를 받아 해당 번호가 포함된 텍스트로 갱신합니다.

FuncAnimationinterval=100(밀리초)마다 함수를 호출하고 총 10개의 프레임을 반복 재생합니다. 참고로, 원본 코드에서는 매 프레임마다 새 텍스트가 계속 쌓여 겹치는 문제가 있을 수 있으므로, ax.texts.clear()를 추가해 기존 텍스트를 제거하면 더 깔끔한 결과를 얻을 수 있습니다.

실행 결과

코드를 실행하면 플롯 상단의 텍스트 상자에 "y=sin(x), frame: 0", "y=sin(x), frame: 1"처럼 프레임 번호가 실시간으로 바뀌는 애니메이션이 표시됩니다.