校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃

主頁 > 知識庫 > 如何利用Matplotlib庫繪制動畫及保存GIF圖片

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

熱門標簽:海外網吧地圖標注注冊 孝感營銷電話機器人效果怎么樣 地圖標注自己和別人標注區別 聊城語音外呼系統 南陽打電話機器人 商家地圖標注海報 ai電銷機器人的優勢 打電話機器人營銷 騰訊地圖標注沒法顯示

前言

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

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

繪制動畫

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

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

然后再創建 animation 的對象。

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

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

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

代碼很簡單。

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 是每一次更新時所調用的方法,它是回調函數。因此,我們可以在這個方法中更新 figure 當中的 axes 中的 line2d 對象,它是動態更新 figure 的根本。

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

init_func 是初始函數,用來初始 figure 的畫面。

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

save_count 是緩存的數量

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

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

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

repeat bool 型可選參數,默認為 True,代表動畫是否會重復執行

blit bool 型可選參數,控制繪制的優化。默認是 False。

如何理解 animation 呢?

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

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

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

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

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

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

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

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

def gen_function() -> obj

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

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

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 函數去定義 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 就是一個生成器函數,它會每隔 10ms 運行一次,然后將結果傳遞給 update 函數。

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

保存動畫

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

好在用 matplotlib 實現它也并不難。

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

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

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

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

sudo apt-get install imagemagick

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

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

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

總結

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

您可能感興趣的文章:
  • Python使用matplotlib繪制動畫的方法
  • Python通過matplotlib繪制動畫簡單實例
  • Python使用Matplotlib實現雨點圖動畫效果的方法
  • matplotlib繪制動畫代碼示例
  • 如何基于Python Matplotlib實現網格動畫
  • 使用numpngw和matplotlib生成png動畫的示例代碼

標簽:聊城 牡丹江 揚州 六盤水 撫州 楊凌 南寧 迪慶

巨人網絡通訊聲明:本文標題《如何利用Matplotlib庫繪制動畫及保存GIF圖片》,本文關鍵詞  如何,利用,Matplotlib,庫,繪制,;如發現本文內容存在版權問題,煩請提供相關信息告之我們,我們將及時溝通與處理。本站內容系統采集于網絡,涉及言論、版權與本站無關。
  • 相關文章
  • 下面列出與本文章《如何利用Matplotlib庫繪制動畫及保存GIF圖片》相關的同類信息!
  • 本頁收集關于如何利用Matplotlib庫繪制動畫及保存GIF圖片的相關信息資訊供網民參考!
  • 推薦文章
    校园春色亚洲色图_亚洲视频分类_中文字幕精品一区二区精品_麻豆一区区三区四区产品精品蜜桃
    91精品国产91久久久久久最新毛片 | 综合精品久久久| 粉嫩一区二区三区在线看| 成人一二三区视频| 精品奇米国产一区二区三区| 一个色妞综合视频在线观看| 91九色02白丝porn| 婷婷久久综合九色国产成人 | 韩国精品主播一区二区在线观看 | 亚洲在线成人精品| 韩国精品一区二区| 麻豆成人在线观看| 国产欧美日韩卡一| 日本高清成人免费播放| 亚洲欧美日韩成人高清在线一区| 成人免费看视频| 亚洲欧洲日韩av| 91在线观看地址| 亚洲成人三级小说| 久久久美女艺术照精彩视频福利播放| 国内精品国产成人| 中文字幕免费不卡在线| 色婷婷国产精品| 日本不卡一区二区三区| 久久日韩粉嫩一区二区三区| 成人av一区二区三区| 午夜精品成人在线| 精品国产91亚洲一区二区三区婷婷 | 91精品在线观看入口| 亚洲一区影音先锋| 久久久www成人免费毛片麻豆| 国产 欧美在线| 久久精品国产77777蜜臀| 亚洲最大的成人av| 国产午夜精品一区二区三区嫩草| 欧美日本乱大交xxxxx| 国产成人在线网站| 激情文学综合网| 日韩激情一区二区| 偷拍一区二区三区| 亚洲一区二区三区四区在线| 国产午夜精品福利| 久久亚区不卡日本| 久久综合色综合88| 精品久久久久久久久久久久包黑料 | 91一区一区三区| 国产乱码精品一区二区三| 视频在线观看国产精品| 亚洲自拍偷拍综合| 亚洲欧美精品午睡沙发| 日韩一区欧美一区| 国产精品久久影院| 中文字幕一区二区不卡| 中文字幕一区视频| 日韩码欧中文字| 国产欧美一区二区精品性色超碰 | 国产精品嫩草99a| 中文字幕精品一区| 欧美极品美女视频| 中文字幕精品—区二区四季| 久久久精品一品道一区| 中文在线免费一区三区高中清不卡| 久久婷婷国产综合国色天香| 久久精品一区二区| 中文字幕欧美一区| 亚洲理论在线观看| 视频一区二区三区中文字幕| 五月综合激情婷婷六月色窝| 免费成人你懂的| 国产成人日日夜夜| 色哟哟在线观看一区二区三区| 91猫先生在线| 欧美男女性生活在线直播观看| 欧美一区二区三区四区视频| 欧美成人video| 中文字幕一区二区三区不卡| 亚洲成a人在线观看| 精品一区二区三区在线播放| 国产成人小视频| 色噜噜狠狠成人网p站| 欧美一区国产二区| 国产日韩欧美精品一区| 亚洲香蕉伊在人在线观| 九九久久精品视频| 色综合天天综合色综合av| 欧美一级午夜免费电影| 国产精品美女久久久久高潮| 亚洲综合成人在线| 国产成人亚洲综合a∨婷婷 | 99久久精品国产观看| 欧美喷潮久久久xxxxx| 国产精品午夜久久| 天堂成人免费av电影一区| 国产一区二区影院| 欧美视频一区二区三区四区| 精品人伦一区二区色婷婷| 日韩一区中文字幕| 久久国产麻豆精品| 欧美日韩日本视频| 亚洲精品中文在线| 激情丁香综合五月| 欧美三级日韩三级国产三级| 久久久久久亚洲综合影院红桃| 亚洲一区二区三区视频在线播放| 国产永久精品大片wwwapp| 欧美日韩一级片在线观看| 国产精品久久久久久久裸模| 毛片一区二区三区| 欧美少妇性性性| 中文字幕在线不卡视频| 国产成人免费视频网站| 日韩欧美一区在线| 日韩精品电影一区亚洲| 欧美日本免费一区二区三区| 亚洲欧美综合网| 成人av在线一区二区| 中文字幕的久久| 国产在线不卡一区| 精品99999| 精品亚洲porn| 日韩免费性生活视频播放| 日韩极品在线观看| 欧美一区二区私人影院日本| 午夜精品福利久久久| 在线一区二区三区做爰视频网站| 日韩视频在线一区二区| 亚洲va韩国va欧美va| 欧美日韩不卡在线| 日韩经典一区二区| 在线成人午夜影院| 奇米一区二区三区av| 午夜伦欧美伦电影理论片| 亚洲国产婷婷综合在线精品| 欧美私模裸体表演在线观看| 中文字幕一区二区三区不卡在线| 成人开心网精品视频| 国产欧美视频一区二区| 成人午夜免费视频| 国产精品区一区二区三区| 风间由美性色一区二区三区| 久久天天做天天爱综合色| 久久精品国产一区二区三区免费看| 欧美一区二区成人6969| 石原莉奈在线亚洲二区| 欧美日本视频在线| 久久99精品久久久| 国产亚洲成aⅴ人片在线观看| 国产一区二区三区免费| 3d成人动漫网站| 麻豆一区二区三| 久久精品欧美日韩精品| 成人高清av在线| 午夜视频在线观看一区二区 | 中文字幕在线不卡一区二区三区| 成人小视频在线| 国产精品夫妻自拍| 色婷婷综合久久久中文一区二区| 蜜桃久久久久久久| 久久一二三国产| 色呦呦国产精品| 国产在线乱码一区二区三区| 亚洲欧美视频一区| 日韩免费看网站| 99久久er热在这里只有精品15| 亚洲图片欧美一区| 精品成人私密视频| 欧美午夜电影一区| 久久99精品久久久久婷婷| 国产精品无码永久免费888| 欧美亚洲动漫制服丝袜| 国产一区二区三区日韩 | 中文字幕在线不卡国产视频| 天天操天天综合网| 久久女同性恋中文字幕| 久久久久久久综合| 色综合久久综合网97色综合| 亚洲一本大道在线| 精品裸体舞一区二区三区| 91蜜桃婷婷狠狠久久综合9色| 亚洲人吸女人奶水| 日韩欧美久久一区| 日本精品裸体写真集在线观看| 国产精品久久久久影院色老大| 在线亚洲+欧美+日本专区| 国产99精品国产| 午夜视频一区在线观看| 国产精品国产三级国产普通话蜜臀| 欧美日韩电影在线| 99久免费精品视频在线观看| 日韩成人午夜电影| 成人欧美一区二区三区黑人麻豆| 欧美精品亚洲二区| 成人aaaa免费全部观看| 免费成人美女在线观看.| 中文字幕不卡的av| 久久久亚洲国产美女国产盗摄| 91精品国产欧美一区二区| 91丨国产丨九色丨pron| 国产成人亚洲综合a∨婷婷图片| 婷婷国产v国产偷v亚洲高清|