最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

如何利用Matplotlib庫繪制動畫及保存GIF圖片

 更新時間:2021年06月07日 08:54:55   作者:frank909  
這篇文章主要給大家介紹了關于如何利用Matplotlib庫繪制動畫及保存GIF圖片的相關資料,matplotlib模塊提供了很高級和非常友好的使用方式,使用起來也是非常方便的,需要的朋友可以參考下

前言

在自學機器學習或者是深度學習的過程中,有的時候總想把執(zhí)行過程或者執(zhí)行結果顯示出來,所以就想到了動畫。好在用 Python 實現(xiàn)動畫有許多中方式,而大家熟知的 Matplotlib 庫就可以實現(xiàn)。

本文的目的是對 Matplotlib 的動畫實現(xiàn)手段做一個簡單的說明。

繪制動畫

import matplotlib.pyplot as plt
import matplotlib.animation as animation

如果要讓 matplotlib 實現(xiàn)動畫功能的話,那么就要引入 animation 模塊。

然后再創(chuàng)建 animation 的對象。

anim = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=10,
                              repeat=False, init_func=init)

animation 的實現(xiàn)類是 FuncAnimation,它有一個構造方法。下面先通過一個示例,講解 animation 的基本用法,然后再來細致分析 FuncAnimation 構造方法中各項參數(shù)的意義。

我們的目標是做一個 Sin 函數(shù)的動畫示例。

代碼很簡單。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro',animated=True)

def init():
    ax.set_xlim(-np.pi,np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

anim = animation.FuncAnimation(fig, update, frames=np.linspace(-np.pi,np.pi, 90),interval=10,
                    init_func=init,blit=True)
plt.show()

核心代碼是這一行。

anim = animation.FuncAnimation(fig, update, frames=np.linspace(-np.pi,np.pi, 90),interval=10,
                    init_func=init,blit=True)

按照上面的示例代碼,我們可以依葫蘆畫瓢編寫動畫代碼了。

但,如果我們需要達到靈活運用的話,就需要花點心思,了解它們的機制。

我們先來看看 FuncAnimation 的構造方法。

def __init__(self, fig, func, frames=None, init_func=None, fargs=None,
                 save_count=None, **kwargs):

fig 自然是 matplotlib 中的 figure 對象。

func 是每一次更新時所調用的方法,它是回調函數(shù)。因此,我們可以在這個方法中更新 figure 當中的 axes 中的 line2d 對象,它是動態(tài)更新 figure 的根本。

frames 代表了整個動畫過程中幀的取值范圍,而本質上是一個數(shù)據(jù)發(fā)生器。我將在后面重點講解它。

init_func 是初始函數(shù),用來初始 figure 的畫面。

fargs 是每次附加給 func 回調函數(shù)的參數(shù),可以為 None

save_count 是緩存的數(shù)量

除此之外,還有一些可選的參數(shù),它們分別是

interval 是每 2 個 frame 發(fā)生的時間間隔,單位是 ms,默認值是 200.

repeat_delay 取值是數(shù)值,如果 animation 是重復播放的話,這個值就是每次播放之間的延遲時間,單位是 ms。

repeat bool 型可選參數(shù),默認為 True,代表動畫是否會重復執(zhí)行

blit bool 型可選參數(shù),控制繪制的優(yōu)化。默認是 False。

如何理解 animation 呢?

我認為,animation 的核心是 frames 和 func。

frames 可以取值:iterable,int,generator 生成器函數(shù) 或者是 None。

在上面的代碼中,我們給 frames 的取值是這樣的。

frames=np.linspace(-np.pi,np.pi, 90)

其實就是一個 list,它的值范圍為 -pi 到 pi,frames 總共有 90 幀,而 list 是一個 iterable 類型,所以它可以不停的迭代。

frames 也可以取值為整數(shù),相當于給參數(shù)賦值 range(frames)。

frames 也可以取值為 None,那么它的結果相當于傳遞 itertools.count,結構就是從 0 開始,每次步進 1,無限的執(zhí)行下去。

frames 還接受 generator 函數(shù),也就是生成器,但有個前提是,生成器要符合下面的簽名格式。

def gen_function() -> obj

參數(shù)列表為空,但需要返回一個值,這個值就會傳入到 func 回調函數(shù)當中。

func 是回調函數(shù),它會在每次更新的時候被調用,所以我們只需要在這個函數(shù)中更新 figure 中的數(shù)值就可以了,就像下面代碼。

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

frames 和 func 的關系是什么?

實際上,frames 決定了整個動畫 frame 的取值范圍,它會在 interval 時間內迭代一次,然后將值傳遞給 func,直到整個 frames 迭代完畢。

我本人而言,也更傾向于用 generator 函數(shù)去定義 frames 而不是直接分配一個列表,所以我可以將之前的代碼改寫如下。

import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation

fig, ax = plt.subplots()
xdata, ydata = [], []
ln, = plt.plot([], [], 'ro',animated=True)

def init():
    ax.set_xlim(-np.pi,np.pi)
    ax.set_ylim(-1, 1)
    return ln,

def update(frame):
    xdata.append(frame)
    ydata.append(np.sin(frame))
    ln.set_data(xdata, ydata)
    return ln,

def data_gen():

    frame = -np.pi

    step = 2 * np.pi / 90

    while frame < np.pi:
        frame += step
        yield frame

# anim = animation.FuncAnimation(fig, update, frames=np.linspace(-np.pi,np.pi, 360),interval=10,
#                     init_func=init,blit=True)
anim = animation.FuncAnimation(fig, update, frames=data_gen,interval=10,
                    init_func=init,blit=True)

plt.show()

data_gen 就是一個生成器函數(shù),它會每隔 10ms 運行一次,然后將結果傳遞給 update 函數(shù)。

data_gen 里面運用到了 yield 關鍵字,這是的我們可以在每次迭代時才返回相應的結構,而不要在一開始就分配。如果不熟悉這方面知識點的同學,可以自行搜索相應的知識。

保存動畫

因為經常寫博客,所以也經常需要將結果保存下來,一般我會保存為 .gif 格式圖片,本篇博文的 gif 圖像就是通過 matplotlib 保存的。

好在用 matplotlib 實現(xiàn)它也并不難。

anim.save('test_animation.gif',writer='imagemagick')

一句代碼就搞定了,運行成功后,會在當前目錄下生成 test_animation.gif 圖像。

需要注意到的是,如果要保存 gif 圖像,這要求開發(fā)者電腦已經安裝了 ImageMagicK。

ubuntu 用戶可以通過如下命令安裝。

sudo apt-get install imagemagick

并且,動畫保存的時候要指定 writer 為 imagemagick.

動畫可以保存為 gif 圖像,自然也能保存為 mp4 視頻格式。

但這要求開發(fā)者計算機已經安裝好 ffmpeg 庫,并且 save 方法中指定 writer 為 ffmpeg,具體細節(jié)請讀者自行擴展閱讀。

總結

到此這篇關于如何利用Matplotlib庫繪制動畫及保存GIF圖片的文章就介紹到這了,更多相關Matplotlib庫繪制動畫內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • 一文秒懂Python中的字符串

    一文秒懂Python中的字符串

    這篇文章主要介紹了一文秒懂Python中的字符串,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • python 調用HBase的簡單實例

    python 調用HBase的簡單實例

    下面小編就為大家?guī)硪黄猵ython 調用HBase的簡單實例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-12-12
  • TensorFlow MNIST手寫數(shù)據(jù)集的實現(xiàn)方法

    TensorFlow MNIST手寫數(shù)據(jù)集的實現(xiàn)方法

    MNIST數(shù)據(jù)集中包含了各種各樣的手寫數(shù)字圖片,這篇文章主要介紹了TensorFlow MNIST手寫數(shù)據(jù)集的實現(xiàn)方法,需要的朋友可以參考下
    2020-02-02
  • Python?jieba庫的安裝詳細圖文教程

    Python?jieba庫的安裝詳細圖文教程

    jieba庫的作用主要用于中文分詞,是一種不錯的中文分詞組件,下面這篇文章主要給大家介紹了關于Python?jieba庫安裝的相關資料,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-03-03
  • Django各種緩存的配置小結 ?

    Django各種緩存的配置小結 ?

    本文主要介紹了Django各種緩存的配置小結 ,Django提供了多種緩存后端,如內存緩存、文件緩存、數(shù)據(jù)庫緩存、Memcached和Redis等,根據(jù)項目需求選擇合適的緩存后端,下面就一起來了解一下吧
    2023-08-08
  • 詳解用Pytest+Allure生成漂亮的HTML圖形化測試報告

    詳解用Pytest+Allure生成漂亮的HTML圖形化測試報告

    這篇文章主要介紹了詳解用Pytest+Allure生成漂亮的HTML圖形化測試報告,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03
  • python滑塊驗證碼的破解實現(xiàn)

    python滑塊驗證碼的破解實現(xiàn)

    這篇文章主要介紹了python滑塊驗證碼的破解實現(xiàn),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • python編程嵌套函數(shù)實例代碼

    python編程嵌套函數(shù)實例代碼

    這篇文章主要介紹了python編程嵌套函數(shù)實例代碼,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-02-02
  • 利用Python如何實現(xiàn)一個小說網(wǎng)站雛形

    利用Python如何實現(xiàn)一個小說網(wǎng)站雛形

    這篇文章主要給大家介紹了關于利用Python如何實現(xiàn)一個小說網(wǎng)站雛形的相關資料,文中通過示例代碼介紹的非常詳細,對大家學習或者使用python具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2018-11-11
  • python elasticsearch環(huán)境搭建詳解

    python elasticsearch環(huán)境搭建詳解

    在本篇文章里小編給大家整理的是關于python elasticsearch環(huán)境搭建的相關知識點內容,有需要的朋友們可以參考下。
    2019-09-09

最新評論

南澳县| 赤峰市| 贵溪市| 双城市| 汉川市| 南和县| 镇雄县| 北辰区| 穆棱市| 浦东新区| 宁强县| 海宁市| 通海县| 大英县| 平顶山市| 林周县| 岗巴县| 柳州市| 甘谷县| 大余县| 乌拉特中旗| 莎车县| 太仆寺旗| 湘潭市| 周至县| 老河口市| 北京市| 苏尼特右旗| 安义县| 沈丘县| 筠连县| 黔西县| 惠水县| 泰顺县| 景泰县| 石家庄市| 于都县| 崇信县| 岫岩| 沙田区| 汽车|