实现动态排名效果(基于Python+Matplotlib)
一、背景
之前的动态排名效果很流行。已有一些成熟的工具可以使用。在接触了Matplotlib的animation模块后,想自己动手实现一下;同时希望提供一些接口,方便对动画的效果和样式进行设置。
在实现过程中遇到很多坑。比如如何利用Python调用imagemagick输出视频文件;直接plt.show()展示的效果竟然和save()出的视频效果有差异;输出的视频“不完整”。不过目前都已经解决。
相关代码已部署到Gitee中(https://gitee.com/jixuanfan/Animation),感兴趣的同学可以去玩一下~
二、应用举例
- 基本动画效果
DA=Dynamic_ranking('Example/test.txt',step=10,interval=2,v_space=3)
DA.Run(repeat=True,repeat_delay=2.5) #直接将动画效果显示到屏幕
DA.Run(save_path='Example/dynamic_ranking_2.gif',writer='imagemagick') #默认的writer是pillow
2. 可配置动画效果
DA=Dynamic_ranking('Example/test.txt',step=10,interval=2,v_space=2,bar_arg={'cmap':{'AA':'#FFAB00','BB':'#3515B0','CC':'#FFE900','DD':'#58E000','EE':'#FF3100'},'alpha':0.8})
DA.Run(repeat=True,repeat_delay=2.5) #直接将动画效果显示到屏幕
DA.Run(save_path='Example/dynamic_ranking.gif') #将动画转换为GIF输出到指定路径
3. 实例:近20年乒乓球男子单打排名
DA=Dynamic_ranking('Example/table_tennis.csv',step=10,interval=2,v_space=2,time_fmt='M',text_arg={'right_x_margin':13,'left_x_margin':10,'time_c':'r','time_fz':18,'name_fz':11,'time_y':0.03})
DA.Run(save_path='Example/table_tennis.gif',writer='pillow')
- 这里仅放部分效果,要查看完整效果,请前往Gitee。
- 更多参数请看
help(Dynamic_ranking)
三、进一步改进
- 增加MP4格式的文件输出;
- 增加数据获取方式,不仅仅通过src参数指定文件路径,也可直接通过list或者ndarray/DataFrame传入数据;
- 进一步优化动画效果,增加更多可配置选项;
- 增加更多动态可视化效果。
原创不易,如果有帮助到你,麻烦点个赞~ 转载请注明出处~