데이터 시각화에서 밀도 맵(density map)은 2차원 평면 위에 값의 분포를 색상으로 표현하는 매우 효과적인 방법입니다. 파이썬의 대표적인 시각화 라이브러리인 Matplotlib을 활용하면 몇 줄의 코드만으로 3D 밀도 맵을 손쉽게 그릴 수 있습니다. 아래에서 단계별로 자세히 알아보겠습니다.
3D 밀도 맵 그리기 단계
NumPy의 linspace() 함수를 사용해 x, y 축에 사용할 기준 데이터(side)를 생성합니다. linspace는 시작점과 끝점 사이를 지정한 개수만큼 균등하게 나눈 값을 배열로 반환합니다.
meshgrid() 메서드를 사용해 좌표 벡터로부터 좌표 행렬(X, Y)을 생성합니다.
x와 y 데이터를 바탕으로 지수 함수 형태의 z 데이터(밀도 값)를 계산합니다.
pcolormesh() 메서드를 사용해 비정형(non-regular) 사각 격자 위에 유사 컬러(pseudocolor) 플롯을 그립니다.
show() 메서드를 호출해 완성된 그림을 화면에 표시합니다.
예제 코드
from matplotlib import pyplot as plt, cm, colors import numpy as np plt.rcParams["figure.figsize"] = [7.00, 3.50] plt.rcParams["figure.autolayout"] = True # -2부터 2까지 15개의 균등한 값 생성 side = np.linspace(-2, 2, 15) # 좌표 벡터로부터 좌표 행렬 생성 X, Y = np.meshgrid(side, side) # 가우시안 형태의 밀도 데이터 계산 Z = np.exp(-((X - 1) ** 2 + Y ** 2)) # 유사 컬러 밀도 맵 그리기 plt.pcolormesh(X, Y, Z, shading='auto') plt.show()
코드 설명
np.linspace(-2, 2, 15): -2에서 2 사이를 15개 구간으로 균등하게 분할한 좌표값을 만듭니다. 이 값이 밀도 맵의 해상도를 결정합니다.
np.meshgrid(side, side): 1차원 좌표 배열을 2차원 격자 좌표 행렬 X, Y로 변환합니다.
Z = np.exp(...): 중심이 (1, 0)인 가우시안 분포 형태의 밀도 값을 계산합니다. 값이 클수록 밀도가 높은 영역을 의미합니다.
pcolormesh(shading='auto'): 격자 크기에 맞춰 셀 단위로 색상을 자동으로 채워 줍니다. 'gouraud' 옵션을 사용하면 더 부드러운 그라데이션 효과를 얻을 수 있습니다.
실행 결과
위 코드를 실행하면 다음과 같이 노란색에 가까울수록 밀도가 높고, 보라색에 가까울수록 밀도가 낮은 3D 밀도 맵이 출력됩니다.
