1. 程式人生 > >python matplotlib繪製gif動圖以及儲存

python matplotlib繪製gif動圖以及儲存

python matplotlib繪製gif動圖以及儲存

標籤: python matplotlib


謹以此文紀念我兩天來的悲劇

昨天我用lstm擬合sin曲線,看到別人畫的做的動圖很好看,並且還能儲存下來,所以我也想做著玩一下,但是沒想到在網上各種教程都不太對,最後還是無意間誤打誤撞成功了,所以紀念一下。

matplotlib繪製動畫

function 1.

第一種方法就是採用matplotlib中的一種互動方式,這樣我們就能保證在plt.show()的時候程序不會掛起,所以達到繪製圖畫的時候能夠連續起來,這種在你做實驗的時候畫著比較簡單,不需要新的知識,只要用過plt畫圖,幾乎一看就明白,下面給出例子:


if __name__ == "__main__":
    fig = plt.figure()
    plt.ion()
    plt.show()
    ims = []
    for i in range(1,10):
        im = plt.plot(np.linspace(0, i,10), np.linspace(0, np.random.randint(i),10))
        ims.append(im)
        plt.draw()
        plt.pause(0.5)
        

這段程式碼沒什麼實際意義,只是為了顯示plt繪製動圖,主要程式碼有plt.ion()

代表著開啟互動模式,所以plt.show()就不會影響後面的程式碼,後面就是普通的畫圖,畫線段plt.plot(),然後plt.draw()就充當了繪製的作用,然後plt.pause()代表暫停0.5秒,這個由於比較簡單,可以在網上找到大量例子,並且都是可以執行和實現的。

或者像下面一樣畫到一個figure裡面。

import matplotlib.pyplot as plt
fig,ax=plt.subplots()
y1=[]
for i in range(50):
    y1.append(i)
    ax.cla()
    ax.bar(y1,label='test',height=
y1,width=0.3) ax.legend() plt.pause(0.3)

但是上面的都只能實現顯示,但是儲存不了,後來發現使用animation可以進行儲存,所以就開始了animation求學之路。

function 2.

其實使用animation畫圖也不是很麻煩,網上的大多數程式碼都能執行,並且也能看明白是在幹什麼。因為我覺得在這個過程中主要是在探索儲存的過程中花了時間,所以就著重講一下如何儲存,先看下面這個例子。

import matplotlib.pyplot as plt
import matplotlib.animation as animation
import numpy as np
if __name__ == "__main__":
    fig = plt.figure()
    ims = []
    for i in range(1,10):
        im = plt.plot(np.linspace(0, i,10), np.linspace(0, np.random.randint(i),10))
        ims.append(im)
    ani = animation.ArtistAnimation(fig, ims, interval=200, repeat_delay=1000)
    ani.save("test.gif",writer='pillow')

其實即使不說,也能看的差不多懂,for迴圈主要是把你要畫的內容存起來,存到ims中,然後使用animation在fig中華ims,其中間隔是200ms,網上還有其他的畫的方式,比如使用一個方法更新,這裡你可以自己搜尋,一般網上的例子都是能用的,但是網上的儲存那個方法大多說都不能用 ,網上的建議是安裝imagemagick或者ffmpeg,或者改一些路徑等,但是我經過測試都不行,不過如果有ffmpeg之後可以儲存成MP4沒問題,可以參考這篇文章,但是即使安裝了imagemagick並且writer使用的是imagemagick,也仍然不能儲存gif,使用imagemagick的操作可以參考這篇文章,主要是關於animation使用和 ImageMagick的安裝等這篇文章,關於修改配置檔案以及這篇文章,也是修改配置檔案,但是經歷過這一路坎坷,仍然是不起作用,最後儲存的gif還是0kb,後來我在改變配置檔案的時候,無疑中改錯了,然後控制檯出現了這個錯誤MovieWriter imagemagick unavailable. Trying to use pillow instead.,然後我就看到了了pillow這個單詞,然後把writer改為pillow,emm,這個gif圖片真是漂亮。
圖一
參考:

[1]: https://segmentfault.com/q/1010000012078750
[2]: https://juejin.im/post/5a7c4ab6f265da4e976e7feb
[3]: https://own-search-and-study.xyz/2017/05/18/pythonのmatplotlibでgifアニメを作成する/
[4]: http://www.hankcs.com/ml/using-matplotlib-and-imagemagick-to-realize-the-algorithm-visualization-and-gif-export.html