■ drawnow는 반복문 속에서 사용되는데, 그리려는 plot에 대해서 drawnow가 호출된다면
그리려고 했던 모든 plot을 다 그리게 된다.
▶ 매우 빠르게 계속 그려주면 움직이는 그림, 애니메이션 처럼 보일 것이다.
▶ 비슷하게 python 라이브러리 중, matplotlib를 이용한 drawnow[1] 라이브러리가 있다.
▶ Python drawnow 라이브러리는 사전에 plot을 그리도록 선언한 함수를 drawnow함수가 호출해야한다.
1. 디렉토리를 만들고 접근하여 drawnow-0.72.5를 다운로드 한다.
$ mkdir Drawnow
$ cd Drawnow
$ w get
https://pypi.python.org/packages/source/d/drawnow/drawnow-0.72.5.tar.gz
2. 압축을 해제하면, drawnow-0.72.5 디렉토리가 생성된다.
$ tar xzf drawnow-0.72.5.tar.gz
3. 생성된 디렉토리에 접근하여 setup.py를 열어서 수정한다.
$ cd drawnow-0.72.5
$ vi setup.py
24 # use_2to3=True, <--- 주석 처리하거나 삭제한다.
4. drawnow-0.72.5를 설치한다.
$ sudo python setup.py install
--
;
;
Using /usr/lib/python3/dist-packages
Finished processing dependencies for drawnow==0.72.5
----------< 예제 >-------------------------------------------------------------------------
$ vi 2D-Sine_fubc.py
import matplotlib.pyplot as plt
import numpy as np
from drawnow import *
fig = plt.figure(1)
angles = []
sines = []
cosines = []
def show_plot():
plt.plot(angles,sines,label='Sine')
plt.plot(angles,cosines,label='Cosine')
plt.legend()
plt.grid()
plt.xlabel('Angles [deg]')
plt.ylabel('Value')
for x in np.linspace(0,np.pi*2,100):
angles = np.append(angles, x)
sines = np.append(sines, np.sin(x))
cosines= np.append(cosines, np.cos(x))
drawnow(show_plot)
$ vi 3D-Surface.py
import matplotlib.pyplot as plt
import numpy as np
from drawnow import *
sizes = 101
x = np.linspace(-np.pi, np.pi, sizes)
X = np.tile(x,(sizes,1))
Y = np.transpose(X)
Z = np.zeros((sizes,sizes),dtype='float')
fig = plt.figure(1)
def show_plot():
ax = fig.add_subplot(111,projection='3d')
ax.plot_surface(X,Y,Z)
ax.set_xlim((-np.pi,np.pi))
ax.set_ylim((-np.pi,np.pi))
ax.set_zlim((-1,1))
pan = 30
tilt = 60
ax.view_init(pan,tilt)
for now in np.linspace(0,2*np.pi,100):
for ix in range(0,sizes):
for iy in range(0,sizes):
dist = np.sqrt(X[ix,iy]**2 + Y[ix,iy]**2)
Z[ix,iy] = np.cos((dist*3+now))*(1/(dist+1))
drawnow(show_plot)