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