用python做动画的代码,用python画动画人物

  用python做动画的代码,用python画动画人物

  计算机编程语言中的绘制精美的图表从1.1.0版本以后就开始支持绘制动画,Matplotlib是一个计算机编程语言的2D绘图库,它以各种硬拷贝格式和跨平台的交互式环境生成出版质量级别的图形。这里介绍几种计算机编程语言使用绘制精美的图表绘制动画的方法。

  下面是几个的示例:

  第一个例子使用generator,每隔两秒,就运行函数data_gen:

  #-*-编码:utf-8-*-

  importnumpyasnp

  importmatplotlib.pyplotasplt

  importmatplotlib.animationasanimation动画动画

  图=plt .图()

  axes1=fig.add_subplot(111)

  line,=axes1.plot(np.random.rand(10))

  #因为更新的参数是调用函数数据生成,

  #所以第一个默认参数不能是framenum

  取消更新(数据):

  line.set_ydata(数据)

  回线,

  #每次生成10个随机数据

  defdata_gen():

  whileTrue:

  yieldnp.random.rand(10)

  ani=动画FuncAnimation(fig,update,data_gen,interval=2*1000)

  PLT。show()第二个例子使用list(metric),每次从metric中取一行数据作为参数送入update中:

  importnumpyasnp

  importmatplotlib.pyplotasplt

  importmatplotlib.animationasanimation动画动画

  start=[1,0.18,0.63,0.29,0.03,0.24,0.86,0.07,0.58,0]

  公制=[[0.03,0.86,0.65,0.34,0.34,0.02,0.22,0.74,0.66,0.65],

  [0.43,0.18,0.63,0.29,0.03,0.24,0.86,0.07,0.58,0.55],

  [0.66,0.75,0.01,0.94,0.72,0.77,0.20,0.66,0.81,0.52]

  ]

  图=plt .图()

  window=fig.add_subplot(111)

  line,=window.plot(start)

  #如果是参数是列表,则默认每次取目录中的一个元素,

  #即指标[0],指标[1],

  取消更新(数据):

  line.set_ydata(数据)

  回线,

  ani=动画FuncAnimation(图,上

  date,metric,interval=2*1000)

  plt.show()第三个例子:

  

importnumpyasnp

  frommatplotlibimportpyplotasplt

  frommatplotlibimportanimation

  #Firstsetupthefigure,theaxis,andtheplotelementwewanttoanimate

  fig=plt.figure()

  ax=plt.axes(xlim=(0,2),ylim=(-2,2))

  line,=ax.plot([],[],lw=2)

  #initializationfunction:plotthebackgroundofeachframe

  definit():

  line.set_data([],[])

  returnline,

  #animationfunction.Thisiscalledsequentially

  #note:iisframenumber

  defanimate(i):

  x=np.linspace(0,2,1000)

  y=np.sin(2*np.pi*(x-0.01*i))

  line.set_data(x,y)

  returnline,

  #calltheanimator.blit=Truemeansonlyre-drawthepartsthathavechanged.

  anim=animation.FuncAnimation(fig,animate,init_func=init,

  frames=200,interval=20,blit=True)

  #anim.save('basic_animation.mp4',fps=30,extra_args=['-vcodec','libx264'])

  plt.show()

第四个例子:

  

#-*-coding:utf-8-*-

  importnumpyasnp

  importmatplotlib.pyplotasplt

  importmatplotlib.animationasanimation

  #每次产生一个新的坐标点

  defdata_gen():

  t=data_gen.t

  cnt=0

  whilecnt<1000:

  cnt+=1

  t+=0.05

  yieldt,np.sin(2*np.pi*t)*np.exp(-t/10.)

  data_gen.t=0

  #绘图

  fig,ax=plt.subplots()

  line,=ax.plot([],[],lw=2)

  ax.set_ylim(-1.1,1.1)

  ax.set_xlim(0,5)

  ax.grid()

  xdata,ydata=[],[]

  #因为run的参数是调用函数data_gen,

  #所以第一个参数可以不是framenum:设置line的数据,返回line

  defrun(data):

  #updatethedata

  t,y=data

  xdata.append(t)

  ydata.append(y)

  xmin,xmax=ax.get_xlim()

  ift>=xmax:

  ax.set_xlim(xmin,2*xmax)

  ax.figure.canvas.draw()

  line.set_data(xdata,ydata)

  returnline,

  #每隔10秒调用函数run,run的参数为函数data_gen,

  #表示图形只更新需要绘制的元素

  ani=animation.FuncAnimation(fig,run,data_gen,blit=True,interval=10,

  repeat=False)

  plt.show()

再看下面的例子:

  

#-*-coding:utf-8-*-

  importnumpyasnp

  importmatplotlib.pyplotasplt

  importmatplotlib.animationasanimation

  #第一个参数必须为framenum

  defupdate_line(num,data,line):

  line.set_data(data[...,:num])

  returnline,

  fig1=plt.figure()

  data=np.random.rand(2,15)

  l,=plt.plot([],[],'r-')

  plt.xlim(0,1)

  plt.ylim(0,1)

  plt.xlabel('x')

  plt.title('test')

  #framenum从1增加大25后,返回再次从1增加到25,再返回...

  line_ani=animation.FuncAnimation(fig1,update_line,25,fargs=(data,l),interval=50,blit=True)

  #等同于

  #line_ani=animation.FuncAnimation(fig1,update_line,frames=25,fargs=(data,l),

  #interval=50,blit=True)

  #忽略frames参数,framenum会从1一直增加下去知道无穷

  #由于frame达到25以后,数据不再改变,所以你会发现到达25以后图形不再变化了

  #line_ani=animation.FuncAnimation(fig1,update_line,fargs=(data,l),

  #interval=50,blit=True)

  plt.show()

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: