10wk-36: 애니메이션

Author

최규빈

Published

November 10, 2023

1. 강의영상

2. Imports

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

3. FuncAnimation

- 모티브

k = 6
x = np.linspace(0,10,100)
y = np.sin(0.1*k*x) 
plt.plot(x,y)

\(k=1,2,3,\dots\)로 바꾸면서 변화하는 그림을 연속으로 출력되게 하여 애니메이션으로 보고 싶다. 따라서

  1. 하나의 고정된 그림을 정의하고
  2. 그림안의 내용물을 frame에 따라 바꾸는 동작을 정의하여

이들을 결합하는 전략을 생각해보자.

- 위의코드는 아래와 같다.

k = 4
x = np.linspace(0,10,100)
y = np.sin(0.1*k*x) 
fig = plt.figure() # 하나의 고정된 그림을 정의하는 코드 
ax = fig.gca() 
ax.plot(x,y) # 고정된 그림에서 내용물을 frame에 따라서 바꾸는 동작을 정의하는 코드 

- 애니메이션

fig = plt.figure() # 하나의 고정된 그림을 정의하는 코드 
<Figure size 672x480 with 0 Axes>
def func(frame):
    ax = fig.gca() 
    ax.clear()
    x = np.linspace(0,10,100)
    y = np.sin(0.1*frame*x) 
    ax.plot(x,y) # 고정된 그림에서 내용물을 frame에 따라서 바꾸는 동작을 정의하는 코드 
ani = matplotlib.animation.FuncAnimation(
    fig, # 하나의 고정된 그림
    func, # 고정된 그림에서 내용물을 frame에 따라서 바꾸는 동작을 함수로 정의하고, 그 함수를 넣음
    frames=50 
) 
display(IPython.display.HTML(ani.to_jshtml()))

4. HW

x = np.linspace(0,10,100)
y = np.sin(5*x) 
plt.plot(x,y)

위의 그림을 이용하여 애니메이션을 만들어라. 이때 frame이 짝수일경우는 color=’C0’로 frame이 홀수일 경우는 color=’C1’으로 그린 그림이 나오도록 애니메이션을 구성하라.