import math as m
import numpy as np
import matplotlib.pyplot as plt
import scipy.special as sp
# import matplotlib.animation as animation
def draw_frame(n,filename,line_color):
fig = plt.figure()
plt.axes([0.02,0.13,0.9,0.8])
plt.hold(True)
plt.xlim(-4*np.pi,4*np.pi)
plt.ylim(-5,5)
# Set up the spines
ax = plt.gca()
ax.spines['right'].set_color('none')
ax.spines['top'].set_color('none')
ax.xaxis.set_ticks_position('bottom')
ax.spines['bottom'].set_position(('data',0))
ax.yaxis.set_ticks_position('left')
ax.spines['left'].set_position(('data',0))
# Set up the label
ax.text(0.3,4.3,'N='+str(n),fontsize=24,color=line_color)
Q = []
# Draw the original function (ORG) curve
X = np.arange(-4*np.pi,4*np.pi, 0.001)
ORG = np.sin(X)
a = plt.plot(X, ORG, '-', color='black', lw=3)
Q.append(a)
# Draw the approximation function (APPR) curve
i=1
APPR = (-1)**(i+1)*(X**(2*i-1))/m.factorial(2*i-1)
while (i<n):
i = i+1
APPR = APPR+(-1)**(i+1)*(X**(2*i-1))/m.factorial(2*i-1)
a = plt.plot(X, APPR, '-', color=line_color, lw=3)
Q.append(a)
plt.savefig(filename)
draw_frame(1,'frame01.jpg','#b30000')
draw_frame(2,'frame02.jpg','#00b300')
draw_frame(3,'frame03.jpg','#0000b3')
draw_frame(4,'frame04.jpg','#b3b300')
draw_frame(5,'frame05.jpg','#00b3b3')
draw_frame(6,'frame06.jpg','#b300b3')
draw_frame(7,'frame07.jpg','#b3b3b3')
draw_frame(8,'frame08.jpg','#3300b3')
draw_frame(9,'frame09.jpg','#33b300')
draw_frame(10,'frame10.jpg','#0033b3')
draw_frame(11,'frame11.jpg','#b3b333')
draw_frame(12,'frame12.jpg','#334433')
draw_frame(13,'frame13.jpg','#ff0000')
draw_frame(14,'frame14.jpg','#0000ff')
draw_frame(15,'frame15.jpg','#00ff00')
# To generate the final GIF file, use the shell command:
# convert -antialias -loop 0 -delay 100 -compress LZW frame* Sine_GIF.gif