Matplotlib 애니메이션 사용하기 2


Matplotlib 애니메이션 사용하기2

이전 페이지에서는 FuncAnimation 클래스로 그래프를 애니메이션으로 표현하는 방법에 대해 소개했습니다.

이번에는 matplotlib.animation 모듈의 ArtistAnimation 클래스를 사용해서 그래프를 애니메이션으로 표현하는 방법에 대해 소개합니다.



1) 기본 사용

예제

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

fig, ax = plt.subplots()

x = np.linspace(0, 2 * np.pi, 100)
y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)

ims = []
for i in range(100):
    x += np.pi / 20
    y += np.pi / 20
    im = ax.imshow(np.sin(x) + np.cos(y), animated=True)
    if i == 0:
        ax.imshow(np.sin(x) + np.cos(y))
    ims.append([im])

ani = animation.ArtistAnimation(fig, ims, interval=100)

plt.show()

np.linspace(a, b, n)는 a부터 b 사이를 균일한 간격으로 나누는 숫자 n개를 반환합니다.

np.pi\(\pi\)를 나타내는 NumPy 상수입니다.

imshow()는 숫자 데이터 어레이를 이미지로 표현하는 함수입니다.

각기 다른 데이터를 imshow() 함수를 사용해서 이미지로 나타내고, ims 리스트에 추가했습니다.

ArtistAnimation 클래스는 이미지의 리스트를 각각의 프레임을 갖는 애니메이션으로 변환합니다.

아래와 같은 애니메이션이 나타납니다.


Matplotlib 애니메이션 사용하기 - 기본 사용

Matplotlib 애니메이션 사용하기 - 기본 사용





2) 애니메이션 저장하기

예제

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

fig, ax = plt.subplots()

x = np.linspace(0, 2 * np.pi, 100)
y = np.linspace(0, 2 * np.pi, 100).reshape(-1, 1)

ims = []
for i in range(100):
    x += np.pi / 20
    y += np.pi / 20
    im = ax.imshow(np.sin(x) + np.cos(y), animated=True)
    if i == 0:
        ax.imshow(np.sin(x) + np.cos(y))
    ims.append([im])

ani = animation.ArtistAnimation(fig, ims, interval=100)

ani.save('sin_plus_cos.gif', writer='imagemagick')
# plt.show()

matplotlib.animation 모듈의 ArtistAnimation 클래스의 save() 메서드는 모든 프레임을 애니메이션으로 저장합니다.

Matplotlib 애니메이션을 저장하기 위해서 ImageMagick을 사용합니다.

이전 페이지와 마찬가지로 writer=’imagemagick’과 같이 지정해주고, save() 메서드를 호출하면 지정한 파일명의 .gif 파일이 지정한 경로에 저장됩니다.


Matplotlib 애니메이션 사용하기 - 애니메이션 저장하기

Matplotlib 애니메이션 사용하기 - 애니메이션 저장하기



이전글/다음글