Deep Learning/Natural Language Processing

[python] 3D 그래프

frances._.sb 2022. 2. 10. 11:32
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 plot

 

 

  • 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()

3d scsatter plot

 

 

 

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
scatter plot w/Monte Carlo method
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