728x90
- 3D Axes 만들기
3D 그래프를 만들려면 3D 렌더링 기능을 가진 서브플롯을 작성할 필요가 있다.
다음과 같이 projection="3d"로 3D 렌더링 기능을 가진 서브플롯을 작성할 수 있다.
matplotlib.fiture().add_subplot(1,1,1,projection="3d")
Example1.
import numpy as np
import matplotlib.pyplot as plt
#3d 렌더링에 필요한 라이브러리입니다.
from mpl_toolkits.mplot3d import Axes3D
%matplotlib inline
t = np.linspace(-2*np.pi,2*np.pi)
X,Y = np.meshgrid(t,t)
R = np.sqrt(X**2 + Y**2)
Z = np.sin(R)
#figure 객체를 만듭니다.
fig = plt.figure(figsize = (6,6))
#서브플롯 ax를 만드세요.
ax = fig.add_subplot(1,1,1,projection = "3d")
#플롯합니다.
ax.plot_surface(X,Y,Z)
plt.show()
- 3D 산포도 만들기
서로 관계가 있는 (또는 있다고 생각되는) 세 종류의 데이터가 있을 때 그들을 3차원 공간에 플롯하여 추세를 시각적으로 예상할 수 있습니다. scatter3D() 에 x축, y축, z축에 대응하는 데이터를 전달하여 3차원 산포도를 만들 수 있습니다. 단, 전달한 데이터는 1차원이어야 하므로 np.ravel()을 이용하여 데이터를 변환해야 하는 경우가 있습니다.
Example2.
import numpy as np
import matplotlib.pyplot as plt
#3d 렌더링에 필요한 라이브러리입니다.
from mpl_toolkits.mplot3d import Axes3D
np.random.seed(0)
%matplotlib inline
X = np.random.randn(1000)
Y = np.random.randn(1000)
Z = np.random.randn(1000)
#figure 객체를 만듭니다.
fig = plt.figure(figsize=(6,6))
#서브플롯 ax를 만듭니다.
ax = fig.add_subplot(1,1,1,projection = "3d")
#X,Y,Z를 1차원으로 변환합니다.
x = np.ravel(X)
y = np.ravel(Y)
z = np.ravel(Z)
#산포도를 만드세요.
ax.scatter(x,y,z)
plt.show()
Example3. 몬테카를로 방법에 의한 원주율의 추정
import matplotlib.pyplot as plt
import numpy as np
import math
import time
%matplotlib inline
np.random.seed(100)
X = 0 #원 안에 들어간 횟수입니다.
#시도 횟수 N을 지정하세요.
N = 1000
#사분면 경계의 방정식 [y = sqrt(1-x^2) (0<=x<=1)] 을 그립니다.
circle_x = np.arange(0,1,0.001)
circle_y = np.sqrt(1 - circle_x * circle_x)
plt.figure(figsize=(5,5))
plt.plot(circle_x,circle_y)
#N번 시도에 걸리는 시간을 측정합니다.
start_time = time.clock()
#N번 시도합니다.
for i in range(0,N):
#0에서 1 사이의 균등 난수를 생성하여 변수 score_x에 저장하세요.
score_x = np.random.rand()
#0에서 1 사이의 균등 난수를 생성하여 변수 score_y에 저장하세요.
score_y = np.random.rand()
#점이 원 안에 들어간 경우와 들어가지 않은 경우를 조건 분기하세요.
if score_x * score_x + score_y * score_y < 1 :
#원 안에 들어가면 검은색으로, 들어가지 않으면 파란색으로 표시하세요.
plt.scatter(score_x, score_y, marker="o", color="k")
#원 안에 들어갔다면 위에서 정의한 변수 X에 1포인트를 더하세요.
X = X + 1
else:
plt.scatter(score_x, score_y, marker="o", color="b")
#pi의 근삿값을 계산하세요.
pi = 4*float(X)/float(N)
#몬테카를로 방법의 실행 시간을 계산합니다.
end_time = time.clock()
time = end_time - start_time
#원주율의 결과를 표시하세요.
print("원주율 : %.6f" % pi)
print("실행시간 : %f" % (time))
#결과를 표시합니다.
plt.grid(True)
plt.xlabel("X")
plt.ylabel("Y")
plt.show()
원주율 : 3.256000
실행시간 : 4.338563
728x90
반응형
'Deep Learning > Natural Language Processing' 카테고리의 다른 글
Document Classification (CNN) (0) | 2022.03.26 |
---|---|
Document Classification (vector space model) (0) | 2022.03.25 |
[python] 데이터 시각화_matplotlib (0) | 2022.02.10 |
[python]Pandas (0) | 2022.02.09 |
[python]Numpy (0) | 2022.02.09 |