So I import the libraries and generate the mock data. I then play around with the plot so it looks right.
import numpy as np import matplotlib.pyplot as plt from scipy import special from mpl_toolkits.mplot3d import axes3d import numpy.ma as ma #Generate some mock data t1 = np.linspace(-10,-2,num=9) t = np.append(t1,np.linspace(-1,1,num=9)) t = np.append(t,np.linspace(2,10,num=9)) T = np.append(t,np.linspace(20,100,num=9)) L = np.linspace(400,800) l,t = np.meshgrid(L,T) #Spectra A = np.exp(-(l-650)**2/(2*50**2))+0.3*np.exp(-(l-550)**2/(2*50**2)) A1 = 0.01 T1 = 20.0 mu = 0.0 w = 0.2 y0 = 0 d = (w/(2*np.sqrt(2*np.log(2)))) #Kinetics K = A1*1/2*np.exp(-t/T1)*np.exp((mu+(d**2)/(2*T1))/T1)*(1+special.erf((t-(mu+(d**2)/T1))/(np.sqrt(2)*d))) + y0 #Masking matrix mask = np.ones(l.shape) #2D spectrum Psi = K*A #Forming the initial plot fig = plt.figure(figsize=(13,8)) ax = fig.add_subplot(221, projection='3d') ax.plot_wireframe(l, t, Psi, linewidth=0.5) ax.view_init(35, 340) ax.set_zlim(0.0,0.012) plt.subplot(222) plt.contourf(L,T,Psi,500) plt.colorbar() plt.title("Contour plot") plt.xlabel("Wavelength (nm)") plt.ylabel("Time (ps)") plt.subplot(223) plt.plot(T,Psi) plt.title("Kinetic") plt.xlabel("Time (ps)") plt.ylabel("Abs.") plt.subplot(224) plt.plot(L,Psi.T) plt.title("Spectra") plt.xlabel("Wavelength (nm)") plt.ylabel("Abs.") plt.subplots_adjust(left=0.06, bottom=0.06, right=0.99, top=0.96, wspace=0.15, hspace=0.22) plt.savefig("animation.png") plt.show()
Then I loop through the masking matrix and save each plot successively.
for i in range(10,L.shape[0]): mask_i = mask.copy() mask_i[i:,:] = 0.0 Psi_i = Psi.copy()*mask_i fig = plt.figure(figsize=(13,8)) ax = fig.add_subplot(221, projection='3d') ax.plot_wireframe(l, t, Psi_i,linewidth=0.5) ax.view_init(35, 340) ax.set_zlim(0.0,0.012) plt.subplot(222) plt.contourf(L,T,Psi_i,200) plt.colorbar() plt.title("Contour plot") plt.xlabel("Wavelength (nm)") plt.ylabel("Time (ps)") plt.subplot(223) plt.plot(T,Psi_i) plt.title("Kinetic") plt.xlabel("Time (ps)") plt.ylabel("Abs.") plt.ylim(0.0,0.012) plt.subplot(224) plt.plot(L,Psi_i.T) plt.title("Spectra") plt.xlabel("Wavelength (nm)") plt.ylabel("Abs.") plt.ylim(0.0,0.012) plt.subplots_adjust(left=0.06, bottom=0.06, right=0.99, top=0.96, wspace=0.15, hspace=0.22) plt.savefig("animation_%s.png"%(i))
I used ImageJ to put the pictures into a gif and set the time between the frames.
No comments:
Post a Comment