Matplotlib 和 Seaborn 用來做數(shù)據(jù)固定的靜態(tài)圖表很不錯(cuò),但如果需要?jiǎng)討B(tài)顯示數(shù)據(jù)的變化過程用這倆庫就有點(diǎn)難度了。如果能用短視頻來動(dòng)態(tài)展示圖表中數(shù)據(jù)的變化是不是就有點(diǎn)厲害了?而且不用學(xué)新的庫,就用Matplotlib 和 Seaborn,是不是更厲害了!今天就教大家一個(gè)很酷的教程,馬上動(dòng)起來。
這里我們用到的數(shù)據(jù)是由美國疾控中心和藥物濫用研究所收集的。我最近用他們的數(shù)據(jù)給一個(gè)關(guān)于美國鴉片藥物濫用危機(jī)的紀(jì)錄片做了幾個(gè)動(dòng)態(tài)圖所以這里就接著用了。下面是數(shù)據(jù)的下載鏈接:
下載地址:
https://www.drugabuse.gov/sites/default/files/overdose_data_1999-2015.xls
除了用Matplotlib和Seaborn來作圖我們還用到了Numpy和Pandas來處理數(shù)據(jù)。先把需要的庫都import進(jìn)來:

接下來把數(shù)據(jù)從下載的Excel文件讀進(jìn)來,我們用Pandas來讀所以讀進(jìn)來就是一個(gè)DataFrame。這里我們還寫了一個(gè)傳入行數(shù)只讀取一行數(shù)據(jù)的函數(shù)。這是為了以后給不同藥物分別做圖的時(shí)候讀數(shù)據(jù)方便一些。

這些準(zhǔn)備工作做好我們就可以開始作圖了。如果你用Jupyter Notebook的 話記得加圖表頁內(nèi)顯示的命令%matplotlib notebook。
我們先用剛才寫的get_data函數(shù)把因?yàn)?**死亡的人數(shù)讀出來。這個(gè)DataFrame有兩列,分別是年份和死亡人數(shù)。

接下來我們初始化一個(gè)ffmpeg輸出流。這里我設(shè)置幀率20碼率1800 ,當(dāng)然你自己可以改幀率和碼率。

下面我們需要?jiǎng)?chuàng)建圖表和橫縱坐標(biāo)。這里要把數(shù)據(jù)范圍定死不然數(shù)據(jù)更新的時(shí)候 Matplotlib 會(huì)自動(dòng)更新數(shù)據(jù)范圍我們的動(dòng)圖數(shù)據(jù)范圍就會(huì)來回變。

繪圖中最重要的就是下面這個(gè) animate 函數(shù),它的參數(shù) i 指的是幀數(shù)。我們通過參數(shù) i 來選擇這一幀應(yīng)該顯示的數(shù)據(jù)然后用 Seaborn 來畫一個(gè)折線圖。最后兩行改改字體和折線的寬度讓圖好看一點(diǎn)。

要讓圖表動(dòng)起來我們得把剛才定義的 animate 函數(shù)傳給 matplotlib.animation.FuncAnimation。除了animate,F(xiàn)uncAnimation還有一個(gè)參數(shù)frames,這個(gè)參數(shù)的意思是說我們這段動(dòng)畫想一共要多少幀。這里 frames 的值是 17 幀,所以 animate 函數(shù)會(huì)被調(diào)用17次。

最后我們把這段動(dòng)畫存成 mp4 格式就行了。如果想先看看效果,可以用plt.show()。
最后出來的效果是這樣的:
意思是有了但給人感覺數(shù)據(jù)的跳躍有點(diǎn)太快了,所以我們可能得給數(shù)據(jù)點(diǎn)中間插點(diǎn)值。插值可以用下面的 augment 函數(shù):
用 augment 函數(shù)處理完數(shù)據(jù)我們還要調(diào)整一下 FuncAnimation 函數(shù)中的幀數(shù)。這里我給 augment 傳入的 numsteps 是 10,也就是說 augment 后從99 年到 15 年的 16 個(gè)數(shù)據(jù)點(diǎn)變成了 160 個(gè),所以幀數(shù)也要設(shè)成 160。調(diào)整完的圖看著順溜多了,不過在數(shù)據(jù)增減變化的地方還是能看到很硬的拐彎。
為了讓這些拐角也平滑一點(diǎn)我們參考了下面這個(gè)鏈接里的高斯平滑算法。這個(gè)鏈接里也介紹了其他的平滑算法。
https://www.swharden.com/wp/2008-11-17-linear-data-smoothing-in-python/
此外我們還可以給圖片加點(diǎn)背景色。
大功告成!其實(shí)不是大功,只是用 Matplotlib 制作動(dòng)態(tài)圖表的一個(gè)很基本的例子。不過原理都是一樣的,在 animate 函數(shù)里繪圖然后調(diào)整調(diào)整合適的參數(shù)什么圖都能動(dòng)起來。最后希望大家順利操作起來!
-
數(shù)據(jù)
+關(guān)注
關(guān)注
8文章
7335瀏覽量
94778 -
短視頻
+關(guān)注
關(guān)注
1文章
128瀏覽量
9565
原文標(biāo)題:使用Python生成動(dòng)態(tài)圖表,一個(gè)很Cool的教程
文章出處:【微信號(hào):rgznai100,微信公眾號(hào):rgznai100】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。
發(fā)布評(píng)論請(qǐng)先 登錄
鴻蒙5開發(fā)寶藏案例分享---一多開發(fā)實(shí)例(短視頻)
【短視頻】征集 急!急!令!!!!
CDN高級(jí)技術(shù)專家周哲:深度剖析短視頻分發(fā)過程中的用戶體驗(yàn)優(yōu)化技術(shù)點(diǎn)
2018亞太CDN峰會(huì)開幕,阿里云王海華解讀云+端+AI的短視頻最佳實(shí)踐
短視頻源碼開發(fā)中,源碼快速搭建的關(guān)鍵點(diǎn)是什么
一般圖表做不了的分析,BI數(shù)據(jù)可視化圖表可以
新手必看:數(shù)據(jù)可視化圖表的選擇技巧
短視頻平臺(tái)源碼互聯(lián)網(wǎng)巨頭紛紛布局,”短視頻+”時(shí)代開始探索
短視頻系統(tǒng)源碼更新內(nèi)容說明-國內(nèi)短視頻平臺(tái)優(yōu)秀作品
短視頻系統(tǒng)平臺(tái)這么火,短視頻源碼開發(fā)前景怎么樣?
區(qū)塊鏈短視頻系統(tǒng)開發(fā)
視頻眼-短視頻服務(wù)平臺(tái)
“蜥蜴腦”時(shí)代來臨 內(nèi)容爆炸式增長,如何在短視頻帶貨中“秒”獲人心?
用短視頻來動(dòng)態(tài)展示圖表中數(shù)據(jù)的變化
評(píng)論