Python/Matplotlib

[Matplotlib] seaborn 파이썬 히트맵 그리는 방법 예제

jimmy_AI 2021. 11. 28. 21:17
반응형

지난 포스팅에서는 숫자형 - 숫자형 자료 사이의 관계 혹은 숫자형 - 범주형 자료 사이의 관계를 살피기 좋은 버블 차트를 파이썬 matplotlib에서 그리는 방법을 살펴보았습니다.

 

이번에는 범주형 - 범주형 자료 사이의 관계를 요약하여 보기 좋은 히트맵을 그리는 방법에 대해서 간단히 다루어보도록 하겠습니다.

 

여기서도 지난 글과 마찬가지로 캐글의 자전거 대여 수요 학습 데이터 셋을 사용하되, 이번에는 시간대와 계절 두 가지 범주를 가지고 그룹화를 진행하여 각 범주의 평균 자전거 대여 수를 대상으로 히트맵을 그려보도록 하겠습니다.

 

파이썬 히트맵 시각화에 필요한 데이터 전처리

히트맵을 그리는 함수는 matplotlib을 기반으로 두면서 더 다채로운 시각화를 할 수 있는 seaborn 패키지 내의 heatmap 함수를 이용하여 진행할 수 있습니다. 먼저 데이터 전처리를 다음과 같이 수행해보도록 하겠습니다.

히트맵을 그리기 위해서는 원하는 범주 2개로 그룹화 후 unstack을 통하여 윗 그림의 데이터프레임처럼 형태를 만들어주는 전처리 작업이 필요합니다.

반응형

파이썬 히트맵 : Seaborn의 sns.heatmap 함수

이제 전처리가 완료된 데이터프레임을 통하여 히트맵을 그려보도록 하겠습니다.

우선, 자세한 내용은 아래 소스 코드를 참고해주시면 좋을 듯 합니다.

import matplotlib.pyplot as plt
import seaborn as sns

# 히트맵을 그릴 격자 생성
fig, ax = plt.subplots(figsize=(12,6))

sns.heatmap(heat, # 위에서 전처리한 데이터프레임
            annot = True, # 숫자 표시 여부
            ax = ax, # 히트맵을 그릴 격자
            linewidths = 0.4, # 선의 굵기
            linecolor = 'white', # 선의 색깔
            fmt = '.1f', # 소수점 포맷팅 형태
            cmap = 'YlOrRd') # colormap 형태

plt.title('bike sharing by season and hours', size = 15)
plt.ylabel('season', size = 13)
plt.xlabel('hours', size = 13) 

plt.xticks(rotation=45, size = 12)
plt.yticks(size=12) 
plt.show()

위의 소스 코드에서는 sns.heatmap의 대표적인 인자들에 대해서 설명했는데요, 그 외에도

 

히트맵에 표시할 최소, 최대 숫자를 지정하는 vmin, vmax 인자,

오른쪽에 colorbar를 표시할 것인지 여부를 지정하는 cbar 인자,

일부 데이터를 표시하지 않을 것인지를 지정하는 mask 인자 등

 

여기서 다루지 않은 여러 기능을 많이 지원하고 있습니다. 자세한 내용이 궁금하시다면 sns.heatmap 함수의 공식 document를 참고해보시면 될 듯 합니다.

 

이상으로 두 범주형 자료 사이의 관계를 한 눈에 시각화하기 좋은 히트맵 자료형에 대한 포스팅이었습니다.