Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Seaborn 히트맵·상관 행렬을 Matplotlib으로 애니메이션 만드는 방법

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 옵션을 사용한 점도 눈여겨볼 부분입니다.

실행 결과

코드를 실행하면 프레임마다 값이 달라지는 히트맵 애니메이션이 출력됩니다. 이 방식은 시간에 따라 변하는 상관 관계나 데이터 분포의 변화를 직관적으로 시각화할 때 특히 유용합니다.