手把手教你用Python和matplotlib製作GIF圖表,學起來!

今天分享一下如何讓可視化秀起來:用 Python 和 matplotlib 製作 GIF 圖表

假如電腦上沒有安裝ImageMagick,先去這裏(https://www.imagemagick.org/script/download.php)按照自己的電腦系統下載對應版本,如果我們想用matplotlib的save方法渲染GIF動圖,就需要安裝ImageMagick。

下圖是我們製作的一個動圖示例:

有兩點需要注意:

圖表中的散點不會動,會動的是直線。

X軸標題每一幀都在變化。

下面是我們製作上面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(每英寸點數)
# 注意當把圖形保存爲文件時,需要爲此單獨再提供一個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軸標籤)
    # 以元組形式返回這一幀需要重新繪製的物體
    line.set_ydata(x - 5 + i)
    ax.set_xlabel(label)
    return line, ax

if __name__ == '__main__':
    # 會爲每一幀調用Update函數
    # 這裏FunAnimation設置一個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()會一直循環動畫
        plt.show()

如果你想換個再酷炫點的主題,可以用seaborn庫,只需添加:

import seaborn

那麼就會得到下面這張GIF圖:

稍微提醒一下:雖然我們這裏的GIF圖只有10幀,圖形內容也很簡單,但每一幀仍有160k左右。因爲GIF動圖不使用跨幀壓縮,所以這就讓幀比較長的GIF圖變得很大。將幀數儘量減少,並且讓每一幀的圖像再小一點(通過在matplotlib中調整圖形大小或DPI)能或多或少有助於緩解這個問題。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章