Computer >> 컴퓨터 >  >> 프로그래밍 >> Python

Matplotlib에서 imshow() 이미지를 3D로 플로팅하는 방법

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 좌표 공간에 등고선으로 표현된 그래프가 나란히 출력됩니다.