利用Python如何制作好玩的GIF動圖詳解
前言
之前我們分享過用Python進(jìn)行可視化的9種常見方式。其實我們還能讓可視化圖形逼格更高一些,今天就分享一下如何讓可視化秀起來:用Python和matplotlib制作GIF圖表。
假如電腦上沒有安裝ImageMagick,先去這里按照自己的電腦系統(tǒng)下載對應(yīng)版本,大家也可以通過腳本之家下載:http://www.dbjr.com.cn/softs/140766.html,如果我們想用matplotlib的save方法渲染GIF動圖,就需要安裝ImageMagick。
下圖是我們制作的一個動圖示例:

有兩點需要注意: 圖表中的散點不會動,會動的是直線。 X軸標(biāo)題每一幀都在變化。
下面是我們制作上面GIF圖的代碼:
import sys
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
fig, ax = plt.subplots()
fig.set_tight_layout(True)
# 詢問圖形在屏幕上的大小和DPI(每英寸點數(shù))
# 注意當(dāng)把圖形保存為文件時,需要為此單獨再提供一個DPI
print('fig size: {0} DPI, size in inches {1}'.format(
fig.get_dpi(), fig.get_size_inches()))
# 繪制一個保持不變(不會被重新繪制)的散點圖以及初始直線
x = np.arange(0, 20, 0.1)
ax.scatter(x, x + np.random.normal(0, 3.0, len(x)))
line, = ax.plot(x, x - 5, 'r-', linewidth=2)
def update(i):
label = 'timestep {0}'.format(i)
print(label)
# 更新直線和軸(用一個新X軸標(biāo)簽)
# 以元組形式返回這一幀需要重新繪制的物體
line.set_ydata(x - 5 + i)
ax.set_xlabel(label)
return line, ax
if __name__ == '__main__':
# 會為每一幀調(diào)用Update函數(shù)
# 這里FunAnimation設(shè)置一個10幀動畫,每幀間隔200ms
anim = FuncAnimation(fig, update, frames=np.arange(0, 10), interval=200)
if len(sys.argv) > 1 and sys.argv[1] == 'save':
anim.save('line.gif', dpi=80, writer='imagemagick')
else:
# Plt.show()會一直循環(huán)動畫
plt.show()
如果你想換個再酷炫點的主題,可以用seaborn庫,只需添加:
import seaborn
那么就會得到下面這張GIF圖:

稍微提醒一下:雖然我們這里的GIF圖只有10幀,圖形內(nèi)容也很簡單,但每一幀仍有160k左右。因為GIF動圖不使用跨幀壓縮,所以這就讓幀比較長的GIF圖變得很大。將幀數(shù)盡量減少,并且讓每一幀的圖像再小一點(通過在matplotlib中調(diào)整圖形大小或DPI)能或多或少有助于緩解這個問題。
總結(jié)
以上就是這篇文章的全部內(nèi)容了,希望本文的內(nèi)容對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,如果有疑問大家可以留言交流,謝謝大家對腳本之家的支持。
相關(guān)文章
解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報錯問題
這篇文章主要介紹了解決Django響應(yīng)JsonResponse返回json格式數(shù)據(jù)報錯問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-08-08
Python如何定義有默認(rèn)參數(shù)的函數(shù)
這篇文章主要介紹了Python如何定義有默認(rèn)參數(shù)的函數(shù),幫助大家更好的理解和學(xué)習(xí)Python,感興趣的朋友可以了解下2020-08-08
Python 內(nèi)置函數(shù)globals()和locals()對比詳解
這篇文章主要介紹了Python globals()和locals()對比詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-12-12
舉例講解Python設(shè)計模式編程中對抽象工廠模式的運用
這篇文章主要介紹了Python設(shè)計模式編程中對抽象工廠模式的運用,文中的例子體現(xiàn)了抽象工廠模式程序的一些設(shè)計優(yōu)化點,需要的朋友可以參考下2016-03-03
python基礎(chǔ)學(xué)習(xí)之遞歸函數(shù)知識總結(jié)
在函數(shù)中調(diào)用函數(shù)自身,我們把這樣的函數(shù)叫做遞歸函數(shù), 遞歸函數(shù)就是循環(huán)的調(diào)用,類似于俄羅斯套娃,本文給各位小伙伴詳細(xì)介紹了python遞歸函數(shù),需要的朋友可以參考下2021-05-05
Pandas DataFrame實現(xiàn)任意位置插入一列或一行
Pandas是Python中最流行的數(shù)據(jù)處理和分析庫之一,在數(shù)據(jù)分析過程中,有時候需要在Dataframe中插入新的數(shù)據(jù)列,本文主要介紹了Pandas DataFrame實現(xiàn)任意位置插入一列或一行,具有一定的參考價值,感興趣的可以了解一下2023-08-08

