利用Python实现动态排名效果

实现动态排名效果(基于Python+Matplotlib)

一、背景

       之前的动态排名效果很流行。已有一些成熟的工具可以使用。在接触了Matplotlib的animation模块后,想自己动手实现一下;同时希望提供一些接口,方便对动画的效果和样式进行设置。
       在实现过程中遇到很多坑。比如如何利用Python调用imagemagick输出视频文件;直接plt.show()展示的效果竟然和save()出的视频效果有差异;输出的视频“不完整”。不过目前都已经解决。
       相关代码已部署到Gitee中(https://gitee.com/jixuanfan/Animation),感兴趣的同学可以去玩一下~

二、应用举例

  1. 基本动画效果
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

利用Python实现动态排名效果
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输出到指定路径

利用Python实现动态排名效果
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')

利用Python实现动态排名效果

  • 这里仅放部分效果,要查看完整效果,请前往Gitee
  • 更多参数请看help(Dynamic_ranking)

三、进一步改进

  1. 增加MP4格式的文件输出;
  2. 增加数据获取方式,不仅仅通过src参数指定文件路径,也可直接通过list或者ndarray/DataFrame传入数据;
  3. 进一步优化动画效果,增加更多可配置选项;
  4. 增加更多动态可视化效果。

原创不易,如果有帮助到你,麻烦点个赞~ 转载请注明出处~

上一篇:【leetcode】35. Search Insert Position


下一篇:【jzoj1733】【字符数组】【分治】【10.5NOIP普及模拟】ranking(ranking.pas/cpp)