This Page

Quick search

"""=================Animated subplots=================This example uses subclassing, but there is no reason that the proper functioncouldn't be set up and then use FuncAnimation. The code is long, but notreally complex. The length is due solely to the fact that there are a total of9 lines that need to be changed for the animation as well as 3 subplots thatneed initial set up."""importnumpyasnpimportmatplotlib.pyplotaspltfrommatplotlib.linesimportLine2Dimportmatplotlib.animationasanimationclassSubplotAnimation(animation.TimedAnimation):def__init__(self):fig=plt.figure()ax1=fig.add_subplot(1,2,1)ax2=fig.add_subplot(2,2,2)ax3=fig.add_subplot(2,2,4)self.t=np.linspace(0,80,400)self.x=np.cos(2*np.pi*self.t/10.)self.y=np.sin(2*np.pi*self.t/10.)self.z=10*self.tax1.set_xlabel('x')ax1.set_ylabel('y')self.line1=Line2D([],[],color='black')self.line1a=Line2D([],[],color='red',linewidth=2)self.line1e=Line2D([],[],color='red',marker='o',markeredgecolor='r')ax1.add_line(self.line1)ax1.add_line(self.line1a)ax1.add_line(self.line1e)ax1.set_xlim(-1,1)ax1.set_ylim(-2,2)ax1.set_aspect('equal','datalim')ax2.set_xlabel('y')ax2.set_ylabel('z')self.line2=Line2D([],[],color='black')self.line2a=Line2D([],[],color='red',linewidth=2)self.line2e=Line2D([],[],color='red',marker='o',markeredgecolor='r')ax2.add_line(self.line2)ax2.add_line(self.line2a)ax2.add_line(self.line2e)ax2.set_xlim(-1,1)ax2.set_ylim(0,800)ax3.set_xlabel('x')ax3.set_ylabel('z')self.line3=Line2D([],[],color='black')self.line3a=Line2D([],[],color='red',linewidth=2)self.line3e=Line2D([],[],color='red',marker='o',markeredgecolor='r')ax3.add_line(self.line3)ax3.add_line(self.line3a)ax3.add_line(self.line3e)ax3.set_xlim(-1,1)ax3.set_ylim(0,800)animation.TimedAnimation.__init__(self,fig,interval=50,blit=True)def_draw_frame(self,framedata):i=framedatahead=i-1head_slice=(self.t>self.t[i]-1.0)&(self.t<self.t[i])self.line1.set_data(self.x[:i],self.y[:i])self.line1a.set_data(self.x[head_slice],self.y[head_slice])self.line1e.set_data(self.x[head],self.y[head])self.line2.set_data(self.y[:i],self.z[:i])self.line2a.set_data(self.y[head_slice],self.z[head_slice])self.line2e.set_data(self.y[head],self.z[head])self.line3.set_data(self.x[:i],self.z[:i])self.line3a.set_data(self.x[head_slice],self.z[head_slice])self.line3e.set_data(self.x[head],self.z[head])self._drawn_artists=[self.line1,self.line1a,self.line1e,self.line2,self.line2a,self.line2e,self.line3,self.line3a,self.line3e]defnew_frame_seq(self):returniter(range(self.t.size))def_init_draw(self):lines=[self.line1,self.line1a,self.line1e,self.line2,self.line2a,self.line2e,self.line3,self.line3a,self.line3e]forlinlines:l.set_data([],[])ani=SubplotAnimation()# ani.save('test_sub.mp4')plt.show()