[03. 패키지 - Matplotlib] (5) 3D 그래프(Axes3D)
작성자 : kim2kie
(2023-02-19)
조회수 : 4101
[참조]
- 공학자를 위한 Python, 조정래, 2022: 4. Matplotlib
https://wikidocs.net/14570 - Dookie Kim, Python: From Beginning to Application, 2022
https://www.dropbox.com/s/oa86j9ap62esmtz/Python.pdf?dl=0
Matplotlib은 그래프를 그리는 패키지이다.
(5) 3D 그래프
1) line and scatter
2) surface
3) bar3d
(5) 3D 그래프
1) line and scatter
-
Ex)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D # 3D plot을 위해 필요
import numpy as np# line plot
fig = plt.figure()
ax = fig.gca(projection='3d') # Axes3D 객체 생성theta = np.linspace(-4*np.pi,4*np.pi,100)
z = np.linspace(-2,2,100)r = z**2+1
x = r*np.sin(theta)
y = r*np.cos(theta)ax.plot(x,y,z,label='parametric curve')
ax.scatter(x,y,z)
ax.legend()ax.set_xlabel('X')
ax.set_ylabel('Y')
ax.set_zlabel('Z')fig.tight_layout()
plt.show()
2) surface
-
Ex)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as npfig = plt.figure()
ax = fig.gca(projection='3d') # Axes3D 객체 생성X=np.arange(-5,5,0.25)
Y=np.arange(-5,5,0.25)
X,Y = np.meshgrid(X,Y) # 격자 grid 생성
R = np.sqrt(X**2+Y**2)
Z = np.sin(R)surf = ax.plot_surface(X,Y,Z,cmap='coolwarm',lw=0,antialiased=False)
wire = ax.plot_wireframe(X,Y,Z,color='r',lw=0.1)
fig.colorbar(surf,shrink=0.5,aspect=5)
fig.tight_layout()
plt.show()
3) bar3d
-
Ex)
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D
import numpy as np# setup the figure and axes
fig = plt.figure(figsize=(8, 3))
ax1 = fig.add_subplot(121, projection='3d') # Axes3D 객체 생성
ax2 = fig.add_subplot(122, projection='3d')# fake data
_x = np.arange(4)
_y = np.arange(5)
_xx, _yy = np.meshgrid(_x, _y) # 격자 grid 생성
x, y = _xx.ravel(), _yy.ravel() # 다차원 배열을 1차원 배열로 풀기top = x + y
bottom = np.zeros_like(top) # top과 같은 사이즈의 0 배열 생성
width = depth = 1ax1.bar3d(x, y, bottom, width, depth, top, shade=True)
ax1.set_title('Shaded')ax2.bar3d(x, y, bottom, width, depth, top, shade=False)
ax2.set_title('Not Shaded')plt.show()