벌집 Hexbin 그래프 시각화와 Plotly 대체 방법: matplotlib vs plotly
들어가며
히트맵 벌집 그래프(Hexbin plot)는 2차원의 평면을 육각형으로 그리드를 나누고, 각 셀에 해당하는 값을 색으로 표현하는 그래프입니다. 점의 밀도를 시각적으로 보여줌으로써 데이터의 분포나 군집을 파악할 때 매우 효과적입니다.
이 글에서는 파이썬의 matplotlib과 plotly을 활용하여 히트맵 벌집 그래프를 그리는 방법을 소개합니다. 2가지 방법의 가장 큰 차이점은 bin의 형태입니다. matplotlib은 육각형, plotly는 사각형으로 시각화합니다.
예제 데이터
이 글에서 예제로 활용할 데이터는 sciki-learn의 iris 데이터입니다. 먼저, 필요한 패키지를 import합니다.
import pandas as pd
from sklearn.datasets import load_iris
iris = load_iris()
df = pd.DataFrame(iris.data, columns=iris.feature_names)
df.head()
matplotlib을 활용한 시각화
matplotlib을 활용한 히트맵 벌집 그래프는 hexbin 메서드를 활용합니다. 꽃받침 길이(sepal length)와 꽃잎 길이(petal length)에 대한 데이터 count를 색상으로 표시하겠습니다.
hexbin 옵션 중 gridsize는 x축 방향의 육각형 개수를 의미하며, y축 방향의 육각형 개수는 자동으로 비율에 따라 맞춰집니다. 즉, girdsize=20은 x축 방향의 20개의 육각형을 의미합니다. cmap은 색상을 설정하는 옵션입니다.
import matplotlib.pyplot as plt
x = df['sepal length (cm)']
y = df['petal length (cm)']
plt.figure(figsize=(8, 6))
hb = plt.hexbin(x, y, gridsize=20, cmap='YlOrRd')
plt.colorbar(hb, label='Counts')
plt.xlabel('Sepal length (cm)')
plt.ylabel('Petal length (cm)')
plt.title('Hexbin Plot of Sepal vs Petal Length')
plt.show()
plotly를 활용한 시각화
plotly는 px.density_heatmap() 메서드를 사용합니다. x축과 y축을 정방형 그리드로 나누어 사각형 셀마다 값을 계산합니다. 위와 동일하게 꽃받침 길이(sepal length)와 꽃잎 길이(petal length)에 대한 데이터 count를 색상으로 표시하겠습니다.
옵션 중 nbinsx, nbinsy는 각각 x, y축 방향의 bin 개수를 설정합니다. 값이 클수록 세밀하게, 작을수록 큰 셀로 시각화합니다. color_continuous_scale은 색상 스케일을 지정합니다. 'Viridis', 'Plasma' 등 다양한 색상으로 설정할 수 있습니다.
import plotly.express as px
fig = px.density_heatmap(
df,
x='sepal length (cm)',
y='petal length (cm)',
nbinsx=20, # x축 bin 수
nbinsy=20, # y축 bin 수
color_continuous_scale='YlOrRd',
title='Density Heatmap of Sepal vs Petal Length (Plotly)'
)
fig.update_layout(width=700, height=500)
fig.show()
'Python' 카테고리의 다른 글
[파이썬] bokeh를 활용한 인터랙티브 시각화 기초 - 꺾은선, 산점도, 막대 그래프 (0) | 2025.07.16 |
---|---|
[파이썬] 특정 조건에 해당하는 컬럼 선택 - 리스트 컴프리핸션, 정규식 (2) | 2025.07.09 |
[파이썬] 구글 제미나이 Gemini API 활용 방법 - API 키 발급, 예제 (4) | 2025.06.27 |
[파이썬] 링크 공유를 위한 QR코드 생성, 글자/이미지 삽입 - qrcode (4) | 2025.06.17 |
[파이썬] OCR을 활용한 PDF/이미지 텍스트 추출 - pytesseract (0) | 2025.06.13 |