Python/Matplotlib

[Matplotlib] plt로 파이썬 3D (3차원) 그래프 그리는 방법

jimmy_AI 2021. 11. 18. 20:02
반응형

파이썬 matplotlib으로 그래프를 그리다보면,

가끔 3차원의 플롯이나 산점도 등을 그리고 싶을 때가 있을 것입니다.

 

이번 포스팅에서는 파이썬으로 3D 그래프를 그리는 아주 간단한 방법에 대해서 살펴보도록 하겠습니다.

 

파이썬 3D (3차원) plot 모듈 - Axes3D

 

파이썬에서 3차원의 그래프를 그리기 위해서는 Axes3D 모듈을 임포트 해주면 됩니다. 다음과 같이 해볼까요?

import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

 

다만 plt.plot 처럼 단순히 그리는 방법으로는 3D plot이 제대로 그려지지 않고요,

다음처럼 subplot에서 projection을 3d로 선언해주는 방식으로 그릴 수 있습니다.

fig = plt.figure(figsize=(9, 6))
ax = fig.add_subplot(111, projection='3d')

 

이제 이 3D 공간에서 plt를 이용하여 간단히 plot, scatter, 평면을 차례대로 그려보도록 하겠습니다.

 

파이썬 plt로 3D plot 그리기

 

나선 모양의 그래프를 예시로 그려보도록 하겠습니다.

다만, x좌표, y좌표, z좌표를 따로따로 지정해주어야한다는 점에 주의해주세요!

import numpy as np

x = np.arange(0, 10, 0.1)
y = np.sin(x)
z = np.cos(x)
ax.plot(x, y, z)

물론, plot 함수 내에서 마커 모양, 선의 색, 굵기 등 다양한 옵션을 지정할 수 있습니다.

 

파이썬 plt로 3D scatter 그리기

이번에는 위에서 그린 그래프를 대상으로 산점도를 그려보도록 하겠습니다.

다음처럼 ax.plot을 ax.scatter로만 바꿔주면 간단히 해결됩니다.

ax.scatter(x, y, z, color = 'r', alpha = 0.5)

물론 2개이상의 그래프를 동시에 그리는 것도 가능합니다. 다음과 같이 해볼까요?

ax.scatter(x, y, z, color = 'r', alpha = 0.5)
ax.scatter(x, z, y, color = 'g', alpha = 0.5) # y와 z축 swap

파이썬 plt로 3D 평면 그리기

마지막으로 3차원 평면을 파이썬 matplotlib으로 그리는 예시를 보여드리도록 하겠습니다.

 

평면은 ax.plot_surface라는 평면을 그리는 함수를 이용하면 됩니다.

그리고 z에 선언하는 변수는 2차원의 형태로 나타내져야 합니다.

x, y로 선언한 좌표를 np.meshgrid를 이용하여 격자 생성 후, 간단한 평면을 그려보도록 하겠습니다.

x = np.arange(0, 10, 0.1)
y = np.sin(x)
x_m, y_m = np.meshgrid(x, y)
z = x_m + 5 * y_m
ax.plot_surface(x, y, z, cmap="brg_r")

여기까지 파이썬 matplotlib에서 3D 그래프의 여러 종류를 그려보는 간단한 예제를 살펴보았습니다.

이 외에 제목을 달거나 축을 조절하는 등 ax 함수에서 제공하는 거의 모든 기능을 그대로 이용가능하지만, 여기서는 따로 다루지는 않도록 하겠습니다.