Matplotlib에서 imshow()로 표시한 이미지를 3D 형태로 함께 시각화하고 싶다면, 2D 이미지와 3D 등고선 플롯을 나란히 배치하여 비교할 수 있습니다. 아래 단계를 따라 진행해 보세요.
구현 단계
numpy를 사용하여 xx, yy 데이터 포인트를 생성합니다.
X, Y, Z를 활용하여 2D 데이터를 준비합니다.
figure() 메서드로 새 figure를 생성하거나 기존 figure를 활성화합니다.
서브플롯 배치의 일부로 ax1을 figure에 추가합니다.
imshow()를 사용하여 데이터를 2D 래스터 이미지 형태로 표시합니다.
3D 투영(projection)을 적용한 ax2를 figure에 추가합니다.
contourf()로 등고선 또는 채워진 등고선 영역을 생성합니다.
show() 메서드를 호출하여 최종 그래프를 화면에 표시합니다.
예제 코드
import matplotlib.pyplot as plt import numpy as np from matplotlib import cm plt.rcParams["figure.figsize"] = [7.50, 3.50] plt.rcParams["figure.autolayout"] = True xx, yy = np.meshgrid(np.linspace(0, 1, 10), np.linspace(0, 1, 10)) X = xx Y = yy Z = 10 * np.ones(X.shape) data = np.cos(xx) * np.cos(xx) + np.sin(yy) * np.sin(yy) fig = plt.figure() ax1 = fig.add_subplot(121) ax1.imshow(data, cmap="plasma", interpolation='nearest', origin='lower', extent=[0, 1, 0, 1]) ax2 = fig.add_subplot(122, projection='3d') ax2.contourf(X, Y, data, 100, zdir='z', offset=0.5, cmap="plasma") plt.show()
코드 설명
np.meshgrid를 이용해 0부터 1 사이의 값으로 이루어진 10×10 격자 좌표를 생성한 후, 코사인과 사인 함수의 조합으로 2D 데이터를 만듭니다. 왼쪽 서브플롯(ax1)에서는 imshow()에 plasma 컬러맵을 적용해 데이터를 이미지로 렌더링하고, 오른쪽 서브플롯(ax2)에서는 contourf()에 zdir='z'와 offset=0.5 옵션을 지정하여 동일한 데이터를 3D 공간의 평면 위에 등고선 형태로 표현합니다. 이를 통해 같은 데이터를 2D 이미지와 3D 등고선 두 가지 관점에서 동시에 비교할 수 있습니다.
실행 결과
코드를 실행하면 왼쪽에는 plasma 컬러맵이 적용된 2D 이미지가, 오른쪽에는 동일한 데이터가 3D 좌표 공간에 등고선으로 표현된 그래프가 나란히 출력됩니다.