今日自律性良好。
上一篇文章利用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,否则无法显示。
还是昨天的案例,绘制每一层楼的销售情况,多行数据的动画:
正确frame应该是np.range(1,5,1),因为初始化已经画了第一行了。
循环作图会无限的循环下去,解决方案是在ani=FuncAnimation(fig, update, frames=np.arange(0,5,1),init_func=init, interval=1000,blit=False,repeat=False),加上repeat=False,不重复循环!
另外在网上的案例有一点让我很不理解:
ln,加了逗号时元组类型,单个元素的元组!
但是不用元组类型就出错?
直接把逗号取消确实会出现问题。因为用了元组,返回的是matplotlib类,但是单个变量返回的是list类,自然就没有set_data属性了。
但是为什么元组返回的就是matplotlib类,单个变量返回的是list类,咱也不知道,咱也不敢问!
后面又发现一个问题,我想着再实验下元组类型变量
目前,这个问题我也搞不懂是什么原因了,因此选择优先不适用元组类型,也就是不加逗号,我也就不用set_data,直接ax.bar(xdata,ydata,animated=False)重置。
但是后期会进行学习,一定要搞清楚为什么!为什么!