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

Matplotlib 애니메이션으로 X축 범위를 동적으로 업데이트하는 방법

Matplotlib의 애니메이션 기능을 활용하면 그래프가 재생되는 동안 X축의 값을 실시간으로 변경할 수 있습니다. 이는 시간에 따라 변화하는 데이터를 시각화하거나, 그래프의 특정 구간을 점진적으로 확대해 보여주고 싶을 때 특히 유용합니다.

아래 단계를 따라 X축 값을 업데이트하는 애니메이션을 만들어 보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
  • plt.subplots()를 사용하여 그림과 축(ax) 객체를 생성합니다.
  • numpy를 이용해 x, y 데이터 포인트를 만듭니다.
  • 축 객체(ax)의 plot() 메서드로 x, y 데이터를 그래프에 그립니다.
  • FuncAnimation을 사용하여 프레임마다 호출되는 animate 함수를 정의하고, 이 함수 내에서 set_xlim() 메서드로 프레임 번호에 따라 X축의 최대값을 갱신합니다.
  • 마지막으로 show() 메서드를 호출하여 애니메이션이 적용된 그림을 화면에 표시합니다.

예제 코드

import matplotlib.pylab as plt
import matplotlib.animation as animation
import numpy as np

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

fig, ax = plt.subplots()
x = np.linspace(0, 15, 100)
y = np.sin(x)

ax.plot(x, y, lw=7)

def animate(frame):
   ax.set_xlim(left=0, right=frame)

ani = animation.FuncAnimation(fig, animate, frames=10)

plt.show()

코드 설명

위 예제에서는 0부터 15까지의 범위에서 100개의 포인트로 사인(sin) 곡선을 생성한 뒤, 선 두께(lw)를 7로 지정하여 굵게 그렸습니다. 핵심은 animate(frame) 함수입니다. FuncAnimation이 총 10개의 프레임을 순차적으로 생성하면서 각 프레임마다 animate 함수를 호출하고, 이때 set_xlim(left=0, right=frame)을 통해 X축의 오른쪽 경계가 프레임 번호만큼 점점 넓어지게 됩니다.

그 결과, 그래프가 처음에는 좁은 구간만 보여주다가 애니메이션이 진행됨에 따라 X축이 0부터 9까지 점진적으로 확장되는 효과를 얻을 수 있습니다. 마치 카메라가 뒤로 당겨지며 더 넓은 화면을 보여주는 듯한 시각적 연출이 가능합니다.

활용 팁

frames 인수에 정수 대신 리스트나 제너레이터를 전달하면 원하는 임의의 축 범위 시퀀스를 지정할 수 있습니다. 또한 interval 매개변수를 추가하면 프레임 간 지연 시간(밀리초)을 조절해 애니메이션 속도를 바꿀 수 있고, repeat=False 옵션을 사용하면 애니메이션이 한 번만 재생되도록 설정할 수도 있습니다.