Matplotlib에서 3D 표면 그래프(surface plot)를 그리려면 1차원 데이터가 아닌 2차원(2D) 데이터 포인트가 필요합니다. 즉, x, y 좌표에 대응하는 z 값이 격자(grid) 형태의 2D 배열로 구성되어 있어야 합니다.
구현 단계
- 그림 크기를 설정하고 서브플롯 주변과 사이의 여백을 조정합니다.
figure()메서드를 사용해 새로운 figure를 생성하거나 기존 figure를 활성화합니다.add_subplot()메서드를 사용하여 subplot 배치의 일부로 '~.axes.Axes'를 figure에 추가하며, 이때projection='3d'옵션을 지정합니다.- 샘플 개수를 나타내는 변수 n을 초기화합니다.
- NumPy를 활용해 x, y, z 데이터 포인트를 생성합니다.
plot_surface()메서드를 사용해 3D 표면 그래프를 그립니다.show()메서드를 호출하여 그래프를 화면에 출력합니다.
예제 코드
import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.50, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
n = 50
x = np.random.rand(n)
y = np.tan(x)
z = np.random.rand(n, n)
surf = ax.plot_surface(y, x, z, rstride=1, cstride=1, cmap='copper', linewidth=0, antialiased=False)
ax.axis('off')
plt.show()코드 설명
위 예제에서 x는 0과 1 사이의 난수 50개로 구성된 1차원 배열이고, y는 x 값에 탄젠트 함수를 적용한 결과입니다. 핵심은 z인데, (n, n) 형태의 2차원 난수 배열로 생성되어 표면 그래프에 필요한 높이(height) 값을 제공합니다.
plot_surface() 메서드의 주요 파라미터는 다음과 같습니다:
- rstride, cstride: 행(row)과 열(column) 방향의 샘플링 간격을 지정합니다. 값이 작을수록 더 촘촘하고 부드러운 표면이 그려집니다.
- cmap: 표면에 적용할 컬러맵을 지정합니다. 예제에서는 'copper' 컬러맵을 사용했습니다.
- linewidth: 표면의 선 굵기입니다. 0으로 설정하면 와이어프레임 선이 제거됩니다.
- antialiased: 안티앨리어싱 적용 여부를 결정합니다.
실행 결과
코드를 실행하면 copper 색상의 3D 표면 그래프가 출력되며, 축은 axis('off') 설정에 의해 숨겨진 상태로 표시됩니다.