Matplotlib 플롯에 텍스트 애니메이션 넣기
데이터 시각화에서 텍스트에 애니메이션 효과를 적용하면 타이핑되는 문구나 동적인 라벨을 표현할 수 있어 발표 자료나 대시보드의 완성도를 크게 높일 수 있습니다. Matplotlib의 FuncAnimation 클래스를 활용하면 몇 줄의 코드만으로 플롯 위의 텍스트를 부드럽게 애니메이션 처리할 수 있습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이와 주변의 여백(padding)을 조정합니다.
- x축과 y축의 표시 범위(limits)를 지정합니다.
- 애니메이션으로 보여줄 문자열 변수를 초기화합니다.
- text() 메서드를 사용해 플롯 위에 텍스트를 배치합니다.
- FuncAnimation()으로 텍스트를 애니메이션화하고, 프레임마다 축에 표시되는 텍스트를 갱신합니다.
- 축(axis)을 숨겨 텍스트만 돋보이게 합니다.
- show() 메서드로 그림을 화면에 출력합니다.
예제 코드
from matplotlib import pyplot as plt, animation
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig, ax = plt.subplots()
ax.set(xlim=(-1, 1), ylim=(-1, 1))
string = 'Hello, how are you doing?'
label = ax.text(0, 0, string[0], ha='center', va='center', fontsize=20, color="Red")
def animate(i):
label.set_text(string[:i + 1])
anim = animation.FuncAnimation(
fig, animate, interval=200, frames=len(string))
ax.axis('off')
plt.show()코드 핵심 포인트
animate(i) 함수는 프레임 번호 i를 인자로 받아 문자열을 처음부터 i+1번째 글자까지만 잘라서 텍스트 객체에 다시 설정합니다. 이렇게 하면 글자가 하나씩 추가되는 타이핑 효과가 만들어집니다.
FuncAnimation의 주요 매개변수는 다음과 같습니다.
- interval=200: 프레임 사이의 지연 시간을 밀리초(ms) 단위로 지정합니다. 값이 작을수록 타이핑 속도가 빨라집니다.
- frames=len(string): 전체 프레임 수를 문자열 길이와 같게 설정하여 문장이 끝까지 완성되도록 합니다.
실행 결과
코드를 실행하면 빨간색 문장 "Hello, how are you doing?"이 화면 중앙에서 한 글자씩 타이핑되듯 나타나는 애니메이션이 재생됩니다.
