前言
之前我們分享過用Python進行可視化的9種常見方式。其實我們還能讓可視化圖形逼格更高一些,今天就分享一下如何讓可視化秀起來:用Python和matplotlib制作GIF圖表。
假如電腦上沒有安裝ImageMagick,先去這里按照自己的電腦系統下載對應版本,大家也可以通過武林站長站下載:https://www.jb51.net/softs/140766.html,如果我們想用matplotlib的save方法渲染GIF動圖,就需要安裝ImageMagick。
下圖是我們制作的一個動圖示例:
有兩點需要注意: 圖表中的散點不會動,會動的是直線。 X軸標題每一幀都在變化。
下面是我們制作上面GIF圖的代碼:
import sysimport numpy as npimport matplotlib.pyplot as pltfrom matplotlib.animation import FuncAnimationfig, ax = plt.subplots()fig.set_tight_layout(True)# 詢問圖形在屏幕上的大小和DPI(每英寸點數)# 注意當把圖形保存為文件時,需要為此單獨再提供一個DPIprint('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, axif __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)能或多或少有助于緩解這個問題。
總結
以上就是這篇文章的全部內容了,希望本文的內容對大家的學習或者工作具有一定的參考學習價值,如果有疑問大家可以留言交流,謝謝大家對武林站長站的支持。
參考資料:drawing-animated-gifs-with-matplotlib/
新聞熱點
疑難解答