Matplotlib 를 사용한 애니메이션 플롯 생성

Beginner

This tutorial is from open-source community. Access the source code

소개

Matplotlib 는 Python 에서 정적, 애니메이션 및 대화형 시각화를 생성하는 데 사용되는 데이터 시각화 라이브러리입니다. 이 랩에서는 Matplotlib 를 사용하여 애니메이션 플롯을 만드는 방법을 배웁니다. FuncAnimation 클래스를 사용하여 감쇠하는 사인파의 애니메이션을 생성합니다.

VM 팁

VM 시작이 완료되면 왼쪽 상단을 클릭하여 Notebook 탭으로 전환하여 실습을 위해 Jupyter Notebook에 액세스하십시오.

때로는 Jupyter Notebook 이 로딩을 완료하는 데 몇 초 정도 기다려야 할 수 있습니다. Jupyter Notebook 의 제한 사항으로 인해 작업의 유효성 검사는 자동화할 수 없습니다.

학습 중에 문제가 발생하면 Labby 에게 문의하십시오. 세션 후 피드백을 제공하면 문제를 즉시 해결해 드리겠습니다.

라이브러리 가져오기

먼저 필요한 라이브러리를 가져와야 합니다. 이 랩에서는 Matplotlib 와 NumPy 를 사용합니다.

import itertools

import matplotlib.pyplot as plt
import numpy as np

import matplotlib.animation as animation

데이터 생성기 함수 생성

다음으로, 애니메이션에 대한 데이터를 생성하는 함수를 만들어야 합니다. 이 함수는 시간이 지남에 따라 감쇠하는 사인파를 생성합니다. itertools.count() 함수를 사용하여 무한 시퀀스의 숫자를 생성합니다. 이 숫자들을 사용하여 사인파의 값을 계산합니다.

def data_gen():
    for cnt in itertools.count():
        t = cnt / 10
        yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)

플롯 설정

이제 플롯을 설정해야 합니다. Matplotlib 의 subplots() 함수를 사용하여 figure 와 axes 객체를 생성합니다. 또한 사인파를 나타내는 line 객체를 생성합니다.

fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []

초기화 함수 정의

플롯의 초기 상태를 설정하는 초기화 함수를 정의해야 합니다. 이 함수에서 y 축 제한을 설정하고 line 객체에서 데이터를 지웁니다.

def init():
    ax.set_ylim(-1.1, 1.1)
    ax.set_xlim(0, 1)
    del xdata[:]
    del ydata[:]
    line.set_data(xdata, ydata)
    return line,

애니메이션 함수 정의

이제 애니메이션의 각 프레임에 대해 플롯을 업데이트하는 함수를 정의해야 합니다. 이 함수는 data_gen() 함수에서 생성된 데이터를 가져와 새 데이터로 플롯을 업데이트합니다. 또한 애니메이션이 진행됨에 따라 x 축 제한을 업데이트합니다.

def run(data):
    ## update the data
    t, y = data
    xdata.append(t)
    ydata.append(y)
    xmin, xmax = ax.get_xlim()

    if t >= xmax:
        ax.set_xlim(xmin, 2*xmax)
        ax.figure.canvas.draw()
    line.set_data(xdata, ydata)

    return line,

애니메이션 생성

마지막으로, FuncAnimation 클래스를 사용하여 애니메이션을 생성할 수 있습니다. 애니메이션을 생성하기 위해 fig, run, data_gen, init_func, 및 interval 매개변수를 전달합니다. 또한 마지막 100 개의 프레임만 저장되도록 save_count 매개변수를 100 으로 설정합니다.

ani = animation.FuncAnimation(fig, run, data_gen, interval=100, init_func=init,
                              save_count=100)

플롯 표시

이제 Matplotlib 의 show() 함수를 사용하여 플롯을 표시할 수 있습니다.

plt.show()

요약

이 랩에서는 Matplotlib 를 사용하여 애니메이션 플롯을 만드는 방법을 배웠습니다. FuncAnimation 클래스를 사용하여 감쇠하는 사인파의 애니메이션을 만들었습니다. 또한 플롯을 설정하고, 데이터 생성기 함수를 정의하고, 초기화 함수를 정의하고, 애니메이션 함수를 정의하고, 애니메이션을 만드는 방법을 배웠습니다.