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

NumPy 3차원 배열로 Matplotlib 3D 플롯 만드는 방법

3차원 NumPy 배열을 이용해 Matplotlib로 3D 플롯을 그리려면, 먼저 NumPy로 3차원 배열을 생성한 뒤 해당 배열에서 x, y, z 좌표 데이터를 추출하면 됩니다. 아래에서 전체 과정을 단계별로 살펴보겠습니다.

구현 단계

  • figure() 메서드를 사용해 새로운 피겨(figure)를 생성하거나 기존 피겨를 활성화합니다.
  • add_subplot() 메서드를 사용해 서브플롯(subplot) 형태로 피겨에 '~.axes.Axes' 객체를 추가합니다.
  • 크기가 (3, 3, 3)인 무작위(random) 데이터를 생성합니다.
  • 생성된 3차원 배열에서 x, y, z 데이터를 추출합니다.
  • 생성된 축(axis) 위에 3D 산점도(scatter) 점들을 플롯합니다.
  • show() 메서드를 호출해 피겨를 화면에 표시합니다.

예제 코드

import numpy as np
from matplotlib import pyplot as plt
plt.rcParams["figure.figsize"] = [7.00, 3.50]
plt.rcParams["figure.autolayout"] = True
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')
data = np.random.random(size=(3, 3, 3))
z, x, y = data.nonzero()
ax.scatter(x, y, z, c=z, alpha=1)
plt.show()

코드 설명

여기서 핵심은 nonzero() 메서드입니다. 이 메서드는 배열에서 값이 0이 아닌(non-zero) 요소들의 인덱스를 반환하며, 무작위로 생성된 실수 배열이므로 사실상 모든 요소의 좌표가 추출됩니다. 반환되는 인덱스 순서를 z, x, y로 지정한 후 scatter() 함수에 전달하면 각 요소의 위치가 3차원 공간에 점으로 표현됩니다. 또한 c=z 옵션을 통해 z값에 따라 점의 색상을 다르게 지정하고, alpha=1로 점을 불투명하게 설정했습니다.

출력 결과

NumPy 3차원 배열로 Matplotlib 3D 플롯 만드는 방법