實現動態排名效果(基於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傳入數據;
- 進一步優化動畫效果,增加更多可配置選項;
- 增加更多動態可視化效果。
原創不易,如果有幫助到你,麻煩點個贊~ 轉載請註明出處~