上一篇文章利用plt.ion()的设置进行了动态图的绘制,今天学习了下利用animation绘制动态图,确实更强大,但是也较难理解。
函数FuncAnimation(fig,func,frames,init_func,interval,blit)是绘制动图的主要函数,其参数如下:
  1、fig 绘制动图的画布名称
  2、func自定义动画函数,即下边程序定义的函数update
  3、frames动画长度,一次循环包含的帧数(每一帧就是每一个画面),在函数运行时,其值会传递给函数update(n)的形参“n”,注意这个就是循环的基准参数,多次循环就是多个值的列表即可。
  4、init_func自定义开始帧,即传入刚定义的函数init,初始化函数,如设置图标大小,刻度等
  5、interval更新频率,以ms计
  6、blit选择更新所有点(False),还是仅更新产生变化的点(True),看情况设置,但mac用户请选择False,否则无法显示。

还是昨天的案例,绘制每一层楼的销售情况,多行数据的动画:

python 动态画图 python怎么画动图_python 动态画图


python 动态画图 python怎么画动图_初始化_02


正确frame应该是np.range(1,5,1),因为初始化已经画了第一行了。

python 动态画图 python怎么画动图_初始化_03


循环作图会无限的循环下去,解决方案是在ani=FuncAnimation(fig, update, frames=np.arange(0,5,1),init_func=init, interval=1000,blit=False,repeat=False),加上repeat=False,不重复循环!另外在网上的案例有一点让我很不理解:

python 动态画图 python怎么画动图_动态图_04


ln,加了逗号时元组类型,单个元素的元组!

但是不用元组类型就出错?

python 动态画图 python怎么画动图_初始化_05


python 动态画图 python怎么画动图_初始化_06


python 动态画图 python怎么画动图_元组_07

直接把逗号取消确实会出现问题。因为用了元组,返回的是matplotlib类,但是单个变量返回的是list类,自然就没有set_data属性了。
但是为什么元组返回的就是matplotlib类,单个变量返回的是list类,咱也不知道,咱也不敢问!

后面又发现一个问题,我想着再实验下元组类型变量

python 动态画图 python怎么画动图_初始化_08


python 动态画图 python怎么画动图_初始化_09


目前,这个问题我也搞不懂是什么原因了,因此选择优先不适用元组类型,也就是不加逗号,我也就不用set_data,直接ax.bar(xdata,ydata,animated=False)重置。