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

Matplotlib에서 데이터프레임으로 3D 표면 그래프(Surface Plot) 그리는 방법

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') 설정에 의해 숨겨진 상태로 표시됩니다.