python matpoltlib绘制动态图_使用Python、Geopandas和Matplotlib制作gif动态
原標(biāo)題:使用Python、Geopandas和Matplotlib制作gif動(dòng)態(tài)
不需要Photoshop:僅使用Python和命令行制作動(dòng)畫圖表。
作為一種編程語言,Python非常靈活。這使得有時(shí)可以在幾行代碼中進(jìn)行大量不同的可視化成為可能。但是現(xiàn)在有了很多不同的圖表網(wǎng)站和軟件,為什么還要編寫代碼?我們不能只使用相關(guān)網(wǎng)站的GUI上傳數(shù)據(jù),調(diào)整范圍,點(diǎn)擊導(dǎo)出png圖片結(jié)果嗎?
是,當(dāng)然可以。有時(shí),如果您需要快速的制作一次性圖表或地圖,這是最佳選擇。但是當(dāng)你需要制作大量的地圖時(shí),使用Python的強(qiáng)大功能會(huì)產(chǎn)生更好的結(jié)果。
本文將介紹如何創(chuàng)建一個(gè)能隨時(shí)間數(shù)據(jù)變化的動(dòng)畫gif地圖。最重要的是,本教程將從頭到尾僅使用Python和一些命令行工具,無需在Photoshop或其他軟件中進(jìn)行任何操作。
正如上面所說,本文的方法在具體工作中也許并不是最佳的方法,但如果考慮到制圖的速度、可重復(fù)性和一致性,我認(rèn)為這是一個(gè)很好的方法。
為什么選擇GIF地圖?
在過去幾年中,gif圖表似乎已經(jīng)在社交媒體上大受歡迎。像“金融時(shí)報(bào)”和“經(jīng)濟(jì)學(xué)人”這樣的出版商花費(fèi)了更多的時(shí)間來精簡和完善他們的數(shù)據(jù)產(chǎn)品,以便于在Twitter和Instagram等平臺(tái)上更好地展示信息。也許更重要的是,gif圖表允許在靜態(tài)圖表顯示的基礎(chǔ)上創(chuàng)建一個(gè)新的數(shù)據(jù)維度。
Gif動(dòng)圖在數(shù)據(jù)可視化中的應(yīng)用場景:
通過注釋或突出顯示來引導(dǎo)用戶瀏覽同一圖表中最重要的點(diǎn)
通過比較顯示兩個(gè)不同的圖表
顯示相同的圖表隨時(shí)間的變化(這是我們要做的)
該清單并非詳盡無遺,用例也在不斷擴(kuò)大,可以說動(dòng)態(tài)圖表既炫酷又實(shí)用(正確使用時(shí))。
下面讓我們來開始制作。
如何制作一個(gè)gif動(dòng)態(tài)地圖
這是您應(yīng)該開始的:
加載shapefile(地圖文件)
加載要顯示的csv數(shù)據(jù)文件
融合這兩個(gè)類型的數(shù)據(jù)
繪制地圖并設(shè)計(jì)樣式
現(xiàn)在,我們將使用Python中for()循環(huán)的強(qiáng)大功能,將多個(gè)不同時(shí)期的數(shù)據(jù)展示在相同的地圖上。因?yàn)槲覀兿胍@示隨時(shí)間的變化,我們需要確保我們的數(shù)據(jù)包含年份作為變量。為便于標(biāo)記,我們確保數(shù)據(jù)的每個(gè)列標(biāo)題都是年份數(shù)字(即不同年的數(shù)據(jù)分別放在不同列)。
為了遍歷每列的數(shù)據(jù),我們需要一個(gè)字符串列表來調(diào)用每列的名稱。讓我們創(chuàng)建一個(gè)列表變量,其中包含每列的年份(格式化為字符串)。我們還設(shè)置一個(gè)輸出路徑,以便將每年的數(shù)據(jù)地圖保存到一個(gè)文件夾中。
最后,在創(chuàng)建地圖之前,我們要為vmin和max值設(shè)置一致的全局變量。這將設(shè)置顏色范圍的值。如果你事先沒有設(shè)置它,Matplotlib將在每次for循環(huán)迭代時(shí)改變等值區(qū)的范圍,因此很難看出值隨時(shí)間的增加或減少的方式。
寫for循環(huán)
for()循環(huán)使用起來相當(dāng)簡單,for()循環(huán)中語法意思大概如下:
對于list_of_years列表中的每一年,運(yùn)行以下代碼。
當(dāng)我們列表中的所有年份都通過代碼時(shí),停止循環(huán)。
如果您運(yùn)行此代碼并打開剛剛設(shè)置的輸出路徑文件夾,您應(yīng)該會(huì)看到許多地圖,每個(gè)地圖的顏色略有不同,代表不同年份的數(shù)據(jù)。您可能會(huì)想:一旦做成地圖動(dòng)畫,我們將如何知道年份的變化?
我們可以在底部設(shè)置一個(gè)簡單的日期范圍(2007-2015),但for()循環(huán)可以為我們提供更好的解決方案。由于我們已經(jīng)將每列的年份保存為變量中的字符串,因此我們可以為每個(gè)地圖添加不同的注釋(對應(yīng)于數(shù)據(jù)的年份)。
根據(jù)我們的for()循環(huán),變量'year'將是每次for循環(huán)運(yùn)行的列的年份。使用這個(gè)邏輯,我們可以插入'year'作為fig.annotate()參數(shù)的變量。
現(xiàn)在,每次for循環(huán)運(yùn)行時(shí),不同的年份將作為注釋插入到地圖上。使用相同的邏輯,我們也可以將文件名設(shè)置為每年開始,這樣就很容易找到每年對應(yīng)的地圖。在for()循環(huán)中添加此代碼將添加年份注釋。
重新運(yùn)行代碼,您的地圖會(huì)替換為新地圖,每個(gè)地圖的左下角都有年份注釋。如果你從上到下翻閱地圖,你就可以了解到你的gif會(huì)是什么樣子。
制作GIF
我們在進(jìn)行GIF制作之前,要將我們得到的所有png格式的地圖圖片,轉(zhuǎn)化為jpg格式,圖片格式轉(zhuǎn)化有多種方法,下面舉了一個(gè)在python中利用opencv(cv2)進(jìn)行圖片格式轉(zhuǎn)化的例子,僅供參考。
接下來我們可以開始制作GIF動(dòng)態(tài)地圖了,有很多方法可以制作GIF動(dòng)圖,我們使用的是ImageMagick,原因有以下幾點(diǎn):
它相對容易安裝和設(shè)置
它允許您在一行代碼中設(shè)置轉(zhuǎn)換時(shí)間,裁剪大小和文件格式
它超級快
ImageMagick的文檔非常詳盡。如果您尚未安裝它,請查看其官方文檔頁面。
首先檢查您是否正確安裝了ImageMagick:
在命令行中輸入并運(yùn)行:
convert –version
如果已成功安裝了ImageMagick,將顯示包含版本和版權(quán)聲明的消息。在系統(tǒng)上安裝ImageMagick后,轉(zhuǎn)到包含我們剛制作的所有地圖的目錄。現(xiàn)在我們需要運(yùn)行一行代碼來創(chuàng)建我們的gif。這行代碼的作用如下:
convert:獲取所有這些文件并進(jìn)行更改
-delay 60:設(shè)置每個(gè)圖像在進(jìn)入下一個(gè)圖像之間經(jīng)過的時(shí)間
-loop 0:設(shè)置無限循環(huán)
插入將要轉(zhuǎn)換的所有文件名
my_map.gif
這是在終端中使用的代碼:
現(xiàn)在看看自動(dòng)創(chuàng)建的新文件“new_map_normal.gif”,你看到的圖像應(yīng)該如下:
使用gif地圖可以成為深入分析數(shù)據(jù)的一個(gè)很好的切入點(diǎn)。 此外,您可以將任何具有時(shí)間序列數(shù)據(jù)的圖表轉(zhuǎn)換為gif動(dòng)圖 - 我們這里只是選擇了地圖,因?yàn)樗雌饋砀趴帷?/p>
如果您有任何疑問,歡迎與我交流,后面會(huì)在評論區(qū)給出源碼鏈接。返回搜狐,查看更多
責(zé)任編輯:
總結(jié)
以上是生活随笔為你收集整理的python matpoltlib绘制动态图_使用Python、Geopandas和Matplotlib制作gif动态的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 计算机对口高考文化试卷,计算机对口高考模
- 下一篇: matlab heaviside,Mat