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

Python Matplotlib: 튜플 리스트 데이터로 3D 표면 플롯 그리기

데이터 분석이나 시각화 작업을 하다 보면 (x, y, z) 좌표가 담긴 튜플 리스트를 3D 표면 그래프로 변환해야 하는 경우가 자주 있습니다. 이 글에서는 Python의 matplotlib 라이브러리를 사용해 튜플 리스트로부터 3D 표면(surface) 플롯을 그리는 방법을 단계별로 살펴보겠습니다.

구현 단계

  • 그림(figure) 크기를 설정하고 서브플롯 주변의 여백(padding)을 조정합니다.

  • x, y, z 좌표를 포함하는 튜플 리스트를 준비합니다.

  • zip(*data)를 활용해 튜플 리스트에서 x, y, z 데이터 포인트를 각각 추출합니다.

  • np.meshgrid() 함수로 좌표 벡터로부터 좌표 행렬을 생성합니다.

  • 표면의 높이 값에 해당하는 h 데이터를 계산합니다.

  • 새로운 figure를 생성하거나 기존 figure를 활성화합니다.

  • figure에서 3D 투영(projection)이 적용된 축(axis)을 가져옵니다.

  • plot_surface() 메서드로 표면 플롯을 생성합니다.

  • plt.show() 메서드로 결과 그래프를 화면에 출력합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt

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

# x, y, z 좌표가 담긴 튜플 리스트
data = [(1, 3, 2), (3, 5, 2), (4, 7, 4), (8, 7, 4),
        (3, 6, 1), (3, 9, 0), (3, 9, 0)]

# 튜플 리스트에서 데이터 포인트 추출
x, y, z = zip(*data)

# 좌표 벡터로부터 좌표 행렬 생성
x, y = np.meshgrid(x, y)

# 표면의 높이(h) 데이터 계산
h = x ** 2 + y ** 2

fig = plt.figure()

# 3D 투영 축 가져오기
ax = fig.gca(projection='3d')

# 표면 플롯 생성
ax.plot_surface(x, y, h, cmap='plasma')

plt.show()

참고 사항

위 코드의 fig.gca(projection='3d')는 구버전 방식이며, 최신 matplotlib 버전(3.x 이상)에서는 다음과 같이 add_subplot()을 사용하는 것이 권장됩니다.

ax = fig.add_subplot(projection='3d')

또한 cmap='plasma' 옵션은 표면의 높이에 따라 색상을 지정하는 컬러맵 설정입니다. 필요에 따라 'viridis', 'coolwarm' 등 다른 컬러맵으로 변경할 수 있습니다.

실행 결과

위 코드를 실행하면 튜플 리스트의 데이터를 기반으로 한 3D 표면 그래프가 출력됩니다.

Python Matplotlib: 튜플 리스트 데이터로 3D 표면 플롯 그리기