데이터 분석이나 과학 컴퓨팅에서 스칼라 값으로 이루어진 2D 데이터를 시각화해야 하는 경우가 자주 있습니다. 파이썬의 대표적인 시각화 라이브러리인 Matplotlib을 사용하면 이러한 데이터를 손쉽게 컬러맵 형태로 표현할 수 있습니다. 이 글에서는 pcolormesh() 함수를 활용해 스칼라 2D 데이터를 시각화하는 방법을 단계별로 살펴보겠습니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 주변 및 사이의 여백(padding)을 조정합니다.
- 데이터 샘플 개수를 담을 변수 N을 초기화합니다.
- NumPy를 사용하여 x, y 데이터 포인트를 생성합니다.
- 좌표 벡터로부터 좌표 행렬(coordinate matrices)을 만듭니다.
- NumPy 연산을 통해 z 데이터 포인트를 계산합니다.
pcolormesh()를 사용하여 비정규(non-regular) 직사각형 그리드 위에 유사컬러(pseudocolor) 플롯을 그립니다.show()메서드를 호출하여 그림을 화면에 출력합니다.
예제 코드
import numpy as np from matplotlib import pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True n = 256 x = np.linspace(-3., 3., n) y = np.linspace(-3., 3., n) X, Y = np.meshgrid(x, y) Z = X * np.sinc(X ** 2 + Y ** 2) plt.pcolormesh(X, Y, Z, cmap='copper', shading='flat') plt.show()
코드 설명
위 코드의 핵심 부분을 자세히 살펴보겠습니다.
1. 그림 크기 설정
plt.rcParams["figure.figsize"]로 그림 크기를 가로 7.5인치, 세로 3.5인치로 지정하고, figure.autolayout을 True로 설정하여 요소들이 잘리지 않도록 자동으로 여백을 조정합니다.
2. 데이터 생성
np.linspace(-3., 3., n)은 -3부터 3까지의 범위를 256개의 균일한 간격으로 나눈 배열을 생성합니다. 이후 np.meshgrid(x, y)를 호출하면 1차원 좌표 벡터 x와 y로부터 2차원 좌표 행렬 X, Y가 만들어집니다.
3. z값 계산
Z = X * np.sinc(X ** 2 + Y ** 2)는 각 격자점에서 sinc 함수 기반의 스칼라 값을 계산합니다. 이렇게 얻은 Z 배열이 시각화할 실제 데이터입니다.
4. pcolormesh로 시각화
pcolormesh(X, Y, Z, cmap='copper', shading='flat')는 격자 좌표에 따라 z 값을 색상으로 매핑합니다. 여기서는 'copper' 컬러맵을 사용하여 구리색 계열의 음영으로 데이터를 표현하며, shading='flat' 옵션은 각 셀을 단일 색상으로 채웁니다.
실행 결과
코드를 실행하면 중심에서 방사형으로 퍼지는 물결 무늬가 copper 색조의 컬러 플롯으로 나타납니다. 값이 높은 영역은 밝게, 낮은 영역은 어둡게 표현되어 2D 스칼라 필드의 분포를 한눈에 파악할 수 있습니다.
마무리
이처럼 Matplotlib의 pcolormesh() 함수를 사용하면 복잡한 설정 없이도 스칼라 2D 데이터를 직관적인 컬러 플롯으로 시각화할 수 있습니다. 컬러맵을 'viridis', 'jet', 'hot' 등 다른 옵션으로 바꾸면 같은 데이터도 전혀 다른 느낌으로 표현할 수 있으니, 다양한 cmap 값을 실험해 보시기 바랍니다.