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

Matplotlib에서 contourf 플롯과 surface_plot을 레이어링하는 방법

Matplotlib에서는 등고선 플롯(contourf)과 3D 표면 플롯(surface_plot)을 하나의 그래프에 겹쳐서 표현할 수 있습니다. 이를 통해 데이터의 윤곽과 입체적인 형태를 동시에 시각화할 수 있어 분석의 가독성이 크게 향상됩니다.

아래 단계를 따라 contourf 플롯과 surface_plot을 레이어링할 수 있습니다.

구현 단계

  • NumPy를 사용하여 delta, xrange, yrange, x, y 변수를 초기화합니다. delta는 격자 간격을 결정하며, 값이 작을수록 더 촘촘한 플롯이 생성됩니다.

  • figure() 메서드를 사용하여 새로운 figure를 생성하거나 기존 figure를 활성화합니다.

  • gca(projection='3d')를 호출하여 3D 투영(projection='3d')이 적용된 현재 축(ax)을 가져옵니다.

  • x, y 데이터 포인트를 기반으로 contour() 메서드를 사용하여 3D 등고선 플롯을 생성합니다. 이 예제에서는 z=0 레벨의 등고선만 표시합니다.

  • plot_surface() 메서드를 사용하여 x, y 데이터 포인트로 3D 표면을 그립니다. cmap 옵션으로 색상 맵을 지정하여 시각적 효과를 높일 수 있습니다.

  • show() 메서드를 호출하여 완성된 figure를 화면에 표시합니다.

예제 코드

from matplotlib import pyplot as plt
import numpy as np

plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True

delta = 0.025
xrange = np.arange(-5.0, 20.0, delta)
yrange = np.arange(-5.0, 20.0, delta)
x, y = np.meshgrid(xrange, yrange)

fig = plt.figure()
ax = fig.gca(projection='3d')
ax.contour(x, y, (np.sin(x) - np.cos(y)), [0])
ax.plot_surface(x, y, (np.sin(x) - np.cos(y)), cmap="afmhot_r")

plt.show()

코드 설명

위 코드에서 np.meshgrid()는 xrange와 yrange를 조합하여 2차원 좌표 격자를 만듭니다. z값은 sin(x) - cos(y) 함수로 계산되며, contour()는 z=0인 지점의 등고선을, plot_surface()는 전체 함수의 3D 표면을 그려 두 레이어가 하나의 축 위에 겹쳐지도록 합니다.

참고: Matplotlib 3.x 버전 이후에는 fig.gca(projection='3d') 대신 fig.add_subplot(projection='3d') 사용이 권장됩니다. 또한 최신 버전에서는 ax.contour()가 기본적으로 오프셋 없이 3D 공간에 등고선을 그리므로, 특정 평면에 배치하려면 offset 파라미터를 활용할 수 있습니다.

실행 결과

코드를 실행하면 afmhot_r 색상 맵이 적용된 3D 표면 위에 z=0 레벨의 등고선이 함께 렌더링된 그래프를 확인할 수 있습니다. 이처럼 여러 플롯을 레이어링하면 함수의 영역(zero-crossing)과 전체적인 형태를 한눈에 파악할 수 있습니다.