Seaborn 히트맵이나 상관 행렬(correlation matrix)에 애니메이션 효과를 적용하려면 Matplotlib의 FuncAnimation 클래스를 활용하면 됩니다. 아래 단계를 따라 진행해 보세요.
구현 절차
- 그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 조정합니다.
- 새 그림을 생성하거나 기존 그림을 활성화합니다.
- 데이터의 차원(dimension) 튜플을 정의합니다.
- Seaborn의
sns.heatmap()으로 초기 히트맵을 그립니다. - 첫 번째 프레임을 위한 init() 함수를 작성합니다.
- FuncAnimation() 클래스를 사용해, 호출될 때마다 무작위 데이터셋을 생성하고 히트맵을 다시 그리는 animate 함수를 반복 실행하여 애니메이션을 만듭니다.
- 마지막으로 show() 메서드로 결과를 화면에 표시합니다.
예제 코드
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
from matplotlib import animation
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
dimension = (5, 5)
data = np.random.rand(dimension[0], dimension[1])
sns.heatmap(data, vmax=.8)
def init():
sns.heatmap(np.zeros(dimension), vmax=.8, cbar=False)
def animate(i):
data = np.random.rand(dimension[0], dimension[1])
sns.heatmap(data, vmax=.8, cbar=False)
anim = animation.FuncAnimation(fig, animate, init_func=init, frames=20, repeat=False)
plt.show()코드 설명
np.random.rand()로 5×5 크기의 무작위 데이터를 생성하고, vmax=.8 옵션으로 컬러 스케일의 최댓값을 고정했습니다. init() 함수는 애니메이션 시작 시 모든 값이 0인 빈 히트맵을 먼저 보여주며, animate(i) 함수는 각 프레임마다 새로운 무작위 데이터로 히트맵을 다시 렌더링합니다.
frames=20은 총 20개 프레임을 생성한다는 의미이고, repeat=False로 설정하면 애니메이션이 한 번만 재생됩니다. 컬러바가 매 프레임 중복 생성되는 것을 막기 위해 cbar=False 옵션을 사용한 점도 눈여겨볼 부분입니다.
실행 결과
코드를 실행하면 프레임마다 값이 달라지는 히트맵 애니메이션이 출력됩니다. 이 방식은 시간에 따라 변하는 상관 관계나 데이터 분포의 변화를 직관적으로 시각화할 때 특히 유용합니다.