상세 컨텐츠

본문 제목

파이썬으로 3차원 그래프 그리기

파이썬과 물리학

by 명쾌 2024. 3. 31. 11:32

본문

728x90

 물리 혹은 수학 공부를 하다 보면 그래프를 그릴 일이 생긴다. 1차원이나 2차원 좌표계에서 그래프를 경우 함수가 복잡하지 않다면 상상하기도 쉽고 그리기도 비교적 어렵지 않지만 3차원의 경우 상상하기도 힘들고 손으로 잘 표현해 내는 것도 쉽지 않다. 하지만 파이썬 코딩을 통해 3차원에서 함수의 정확한 그래프를 구현할 수 있다. 그래프를 시각화하는 여러 소프트웨어가 있지만 오늘은 파이썬으로 3차원 그래프를 시각화하는 방법에 대해 알아본다.

 

 본격적인 코딩을 시작하기 전에 먼저 필요한 라이브러리를 설치해야 한다. 크게 2가지 인데 하나는 matplotlib, 다른 하나는 numpy다. matplotlib 라이브러리는 정적이고 동적인 시각화 자료를 만들어주는 파이썬 라이브러리다. matplotlib에 대해 자세히 알아보고 싶다면 아래 사이트에 들어가 보는 것을 추천한다.

Matplotlib — Visualization with Python

 

Matplotlib — Visualization with Python

seaborn seaborn is a high level interface for drawing statistical graphics with Matplotlib. It aims to make visualization a central part of exploring and understanding complex datasets. statistical data visualization Cartopy Cartopy is a Python package des

matplotlib.org

 

cmd창이나 IDE를 사용한다면 console창에 pip install matplotlib 명령어를 실행한다.

pip install matplotlib

 

그 다음 numpy라이브러리를 설치해야 하는데 numpy는 행렬이나 대규모 다차원 배열을 쉽게 처리할 수 있도록 지원하는 파이썬 라이브러리다. matplotlib 라이브러리와 자주 함께 쓰인다. numpy도 마찬가지로 자세히 알아보고 싶다면 아래 사이트를 참고한다.

NumPy -

 

NumPy -

Use the interactive shell to try NumPy in the browser

numpy.org

numpy 라이브러리를 설치해야 하니 같은 cmd나 콘솔 창에 pip install numpy 명령어를 실행한다.

 

pip install numpy

 

그럼 이제 시각화를 구현한 코드를 본격적으로 본다.

 

코드


from mpl_toolkits.mplot3d import axes3d # 3차원 그래프를 그리기 위한 axes3d 모듈 import
import matplotlib.pyplot as plt # matplotlib import
import numpy as np # numpy import
 
fig = plt.figure() # 그래프를 그리기 위한 윈도우 생성 (기본값 세팅)
ax = plt.axes(projection='3d') # 3차원 좌표계로 설정
 
# x, y값의 범위 지정
x = np.linspace(-10, 10, 100)
y = np.linspace(-10, 10, 100)
# x, y를 조합한 2차원 그리드 생성. ex) X[0, 0] = X[x[0], y[0]], X[0, 1] = X[x[0], y[1]]
X, Y = np.meshgrid(x, y)
 
# 함수 선언
def func(a, b): 
    z = (-1/3)*a - (1/3)
    return z
 
# 함수 선언
def func2(a, b):
    z = (1/4)*b - (1/2)
    return z
 
temp = np.zeros((len(x), len(y))) # 100행, 100열 크기에 모든 원소가 0인 2차원 배열 생성
 
# 위에서 만든 배열에 실제 독립변수와 종속변수의 값을 채워 넣는 코드
for i in range(100): 
    for j in range(100):
        temp[i, j] = func(x[i], y[j])

temp2 = np.zeros((len(x), len(y))) # 100행, 100열 크기에 모든 원소가 0인 2차원 배열 하나 더 생성
 
# 위에서 만든 배열에 실제 독립변수와 종속변수의 값을 채워 넣는 코드
for i in range(100):
    for j in range(100):
        temp2[i, j] = func2(x[i], y[j])
        

# argument : 1. 2D array, 2. 2D array, 3. 2D array
ax.plot_surface(X, Y, temp, cmap='viridis') # 첫 번째 함수(z = (-1/3)a - (1/3)) 시각화
ax.plot_surface(X, Y, temp2, cmap='viridis') # 두 번째 함수 (z = (1/4)b - (1/2)) 시각화

plt.show() # jupyter notebook이 아닌 실행환경에서 그래프가 그려진 윈도우를 띄우는 코드

 

이 코드가 문제없이 동작한다면 아래와 같은 그래프가 그려질 것이다.

 

그래프


z = (-1/3)a - 1/3과 z = (1/4)b - 1/2 그래프

 

결론


 오늘은 파이썬 코딩으로 3차원 좌표계에서 그래프를 그리는 방법에 대해 알아보았다. 물론 코딩을 모른다면 접근하기 쉽지 않겠지만 파이썬 코딩을 아시는 분들이라면 생각보다 어렵지 않게 3차원 좌표계에 그래프를 시각화할 수 있음을 느꼈으면 한다. 

관련글 더보기

댓글 영역