Matplotlib 헥스빈 히스토그램이란?
헥스빈(hexbin) 플롯은 수천 개에 달하는 대량의 데이터 포인트를 육각형 모양의 격자(빈)로 나누어 각 영역의 데이터 밀도를 색상으로 표현하는 시각화 기법입니다. 일반적인 산점도(scatter plot)는 데이터가 많아질수록 점들이 겹쳐 분포를 파악하기 어려워지지만, 헥스빈 히스토그램을 사용하면 데이터가 집중된 영역을 한눈에 확인할 수 있습니다.
Matplotlib에서 헥스빈 히스토그램을 그리려면 hexbin() 메서드를 활용하면 되며, 전체 과정은 다음 단계로 진행됩니다.
구현 단계
그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백을 조정합니다.
NumPy를 사용하여 x, y 데이터 포인트를 생성합니다.
figure 객체와 서브플롯 축(ax)을 생성합니다.
hexbin() 메서드로 x, y 데이터를 플롯합니다.
플롯의 제목을 설정합니다.
show() 메서드를 호출하여 결과 그림을 화면에 표시합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
x = 2 * np.random.randn(5000)
y = x + np.random.randn(5000)
fig, ax = plt.subplots()
_ = ax.hexbin(x[::10], y[::10], gridsize=20, cmap='plasma')
ax.set_title('Hexbin Histogram')
plt.show()코드 설명
x = 2 * np.random.randn(5000): 평균 0, 표준편차 2를 따르는 정규분포 난수 5,000개를 생성합니다.
y = x + np.random.randn(5000): x 값에 표준편차 1의 잡음을 더해 양의 상관관계를 가진 y 데이터를 만듭니다.
x[::10], y[::10]: 슬라이싱을 통해 5,000개 중 10개씩 건너뛰어 총 500개의 데이터만 플롯에 사용합니다.
gridsize=20: x축 방향으로 20개의 육각형 빈을 생성하여 격자 해상도를 조절합니다. 값이 클수록 빈이 잘게 나뉩니다.
cmap='plasma': 데이터 밀도를 표현할 컬러맵을 plasma로 지정합니다. 'viridis', 'inferno' 등 다른 컬러맵으로 교체할 수 있습니다.
실행 결과
위 코드를 실행하면 양의 상관관계를 보이는 데이터 분포가 plasma 컬러맵으로 표현된 육각형 빈 히스토그램이 출력되며, 데이터가 밀집한 중심부일수록 진한 색상으로 표시됩니다.