Matplotlib로 회색조 이미지의 표면 플롯 만들기
Matplotlib를 사용하면 회색조(grayscale) 이미지 데이터를 3차원 표면 플롯(surface plot)으로 손쉽게 시각화할 수 있습니다. 이미지의 각 픽셀 밝기 값을 높이(height)로 변환하여 입체적인 지형처럼 표현할 수 있어, 데이터 분석이나 과학 시각화에 유용하게 활용됩니다.
구현 단계
- 그림(figure) 크기를 설정하고 서브플롯 사이 및 주변의 여백(padding)을 조정합니다.
- NumPy를 사용하여 무작위 데이터 포인트를 생성합니다.
- 2D 이미지 데이터 래스터에서 xx, yy 좌표 배열을 얻습니다.
- 새 그림을 생성하거나 기존 그림을 활성화합니다.
- 현재 축을 가져와 3D 투영(projection) 축으로 설정합니다.
cmap='gray'옵션을 적용하여 표면 플롯을 생성합니다.show()메서드를 호출하여 결과 그림을 화면에 표시합니다.
예제 코드
import numpy as np import matplotlib.pyplot as plt plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True # 5x5 크기의 무작위 데이터 생성 data = np.random.rand(5, 5) # 2D 래스터에서 x, y 좌표 그리드 생성 xx, yy = np.mgrid[0:data.shape[0], 0:data.shape[1]] fig = plt.figure() ax = fig.gca(projection='3d') # 회색조 컬러맵으로 표면 플롯 그리기 ax.plot_surface(xx, yy, data, rstride=1, cstride=1, linewidth=0, cmap='gray') plt.show()
실행 결과

참고 사항
Matplotlib 3.6 이상 버전에서는 fig.gca(projection='3d') 방식이 지원 중단(deprecated)되었습니다. 최신 버전을 사용한다면 다음과 같이 add_subplot을 이용하는 것이 좋습니다.
ax = fig.add_subplot(projection='3d')
또한 실제 회색조 이미지 파일을 사용하려면 np.random.rand() 대신 plt.imread('image.png')로 이미지를 불러온 뒤, 필요시 rgb2gray 등의 함수로 회색조로 변환하여 동일한 방식으로 플롯을 그리면 됩니다.