欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Matplotlib繪圖基礎(chǔ)之動畫繪制詳解

 更新時間:2023年08月09日 09:46:27   作者:databook  
matplotlib的動畫一直是一個強大但使用頻率不高的功能,通過動畫來展示數(shù)據(jù)和模型的變化過程,可使數(shù)據(jù)的可視化更加生動形象,下面就跟隨小編一起學(xué)習(xí)一下Matplotlib是如何繪制動畫的吧

matplotlib動畫一直是一個強大但使用頻率不高的功能,究其原因,一方面展示動畫需要一定的媒介,沒有圖形和文字展示方便;二來大家更關(guān)心的是分析結(jié)果的最終圖表,圖表的動態(tài)展示則沒有那么重要。

不過,隨著短視頻的興起,在短視頻平臺上展示動畫變得非常容易,所以,我們發(fā)現(xiàn)有越來越多的數(shù)據(jù)分析動畫(比如各種橫向條形圖的排名等等)出現(xiàn)在了短視頻平臺上。

通過動畫來展示數(shù)據(jù)和模型的變化過程,可使數(shù)據(jù)的可視化更加生動形象,隨著各種平臺的興起,matplotlib的動畫功能也因此有了更多的用武之地。

1. 動畫示例

介紹matplotlib的動畫功能之前,先看用matplotlib制作的兩個簡單的的動畫示例。

1.1. 單個動畫

首先是單個動畫,繪制一個正弦曲線。

import numpy as np
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.animation as animation
x = np.linspace(-8, 8, 100)
y = np.sin(x)
fig, ax = plt.subplots()
(g,) = ax.plot(x, y)
def update(frame):
    y = np.sin(x[:frame])
    g.set_data(x[:frame], y)
animation.FuncAnimation(fig, update, interval=50, frames=len(x))

1.2. 組合動畫

除了單個動畫之外,組合動畫也簡單,下面的示例中,先繪制一個正弦曲線,然后一個點沿著曲線運動,隨著這個點,繪制正弦曲線的切線。

x = np.linspace(-8, 8, 100)
f = lambda x: np.sin(x / 2)
fig, ax = plt.subplots()
fig.set_size_inches(8, 4)
ax.plot(x, f(x), 'lightblue')
(point,) = ax.plot(x[0], f(x[0]), "r", alpha=0.4, marker="o")
(line,) = ax.plot([0], [0], "g", linewidth=3)
#繪制切線
def tangent_line(x0, y0):
    h = 1e-4
    num_min = f(x0 - h)
    num_max = f(x0 + h)
    k = (num_max - num_min) / (2 * h)
    xs = np.linspace(x0 - 0.5, x0 + 0.5, 100)
    ys = y0 + k * (xs - x0)
    return xs, ys
#移動切點
def move_point(frame):
    point.set_data([x[frame]], [f(x[frame])])
    xs, ys = tangent_line(x[frame], f(x[frame]))
    line.set_data(xs, ys)
animation.FuncAnimation(fig, move_point, interval=50, frames=len(x))

2. 動畫函數(shù)

matplotlib的動畫函數(shù)主要有兩種,它們的動畫原理差別很大,了解它們之間的區(qū)別,才能根據(jù)自己的場景選擇合適的動畫函數(shù)。

2.1. FuncAnimation

上一節(jié)的示例中使用的就是FuncAnimation,它的動畫原理是通過回調(diào)函數(shù),不斷重繪圖形,已達到動畫的效果。
主要的參數(shù)有:

  • 畫布:比如上面第一個示例中的 fig
  • 回調(diào)函數(shù):比如上面第一個示例中的 update
  • 調(diào)用回調(diào)函數(shù)的間隔:比如上面第一個示例中的 interval=50,單位是毫秒
  • 調(diào)用回調(diào)函數(shù)的次數(shù):比如上面第一個示例中的 frames=len(x)

簡單來說,也就是FuncAnimation函數(shù)每隔interval毫秒,調(diào)用一次update,一共調(diào)用frames次。

2.2. ArtistAnimation

ArtistAnimation函數(shù)的原理則是先準備好每一幀的數(shù)據(jù),然后繪制按照一定的時間間隔,繪制每一幀數(shù)據(jù)對應(yīng)的圖像。

比如上面的示例一樣的正弦曲線,用ArtistAnimation函數(shù)繪制的話:

points = np.linspace(-8, 8, 100)
fig, ax = plt.subplots()
frames = []
for i in range(50):
    x = points[:i]
    y = np.sin(x)
    g = ax.plot(x, y)
    frames.append(g)
animation.ArtistAnimation(fig, frames, interval=50)

ArtistAnimation的主要參數(shù):

  • 畫布:比如上面示例中的 fig
  • 每一幀的數(shù)據(jù):比如上面示例中的 frames
  • 每一幀的間隔:比如上面示例中的 interval=50,單位是毫秒

ArtistAnimation沒有回調(diào)函數(shù),只要準備好每一幀的數(shù)據(jù),它會按照時間間隔繪制每一幀的數(shù)據(jù)。

3. 動畫導(dǎo)出

最后,是動畫的導(dǎo)出,常用的兩種格式是MP4GIF。
如果安裝了 ffmpeg,那么導(dǎo)出這兩種格式就很簡單了。

3.1. 導(dǎo)出mp4

#前面部分省略。。。
anim = animation.FuncAnimation(fig, update, interval=50, frames=len(x))
anim.save("./output.mp4", writer='ffmpeg')

導(dǎo)出的文件名后綴 mp4,則可以導(dǎo)出視頻。

這里的writer參數(shù)用ffmpeg。

3.2. 導(dǎo)出GIF

同樣,導(dǎo)出gif也一樣,文件名的后綴 gif即可。

#前面部分省略。。。
anim = animation.FuncAnimation(fig, update, interval=50, frames=len(x))
anim.save("./output.gif", writer='ffmpeg')

當(dāng)然,也可以不用ffmpeg,比如,如果安裝了imagemagick,這里的writer也可以用imagemagick。

#前面部分省略。。。
anim = animation.FuncAnimation(fig, update, interval=50, frames=len(x))
anim.save("./output.gif", writer='imagemagick')

以上就是Matplotlib繪圖基礎(chǔ)之動畫繪制詳解的詳細內(nèi)容,更多關(guān)于Matplotlib動畫的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • 用Python實現(xiàn)web端用戶登錄和注冊功能的教程

    用Python實現(xiàn)web端用戶登錄和注冊功能的教程

    這篇文章主要介紹了用Python實現(xiàn)web端用戶登錄和注冊功能的教程,需要的朋友可以參考下
    2015-04-04
  • 利用Python+PyQt5實現(xiàn)簡易瀏覽器的實戰(zhàn)記錄

    利用Python+PyQt5實現(xiàn)簡易瀏覽器的實戰(zhàn)記錄

    這篇文章主要給大家介紹了關(guān)于如何利用Python+PyQt5實現(xiàn)簡易瀏覽器的相關(guān)資料,Qt 的主要優(yōu)勢是可以開發(fā)跨平臺的圖形界面程序,基于 Qt 的應(yīng)用能夠借助于各平臺的原生性在不同類的設(shè)備上運行,而無須修改任何代碼庫,需要的朋友可以參考下
    2021-07-07
  • pandas實現(xiàn)按行選擇的示例代碼

    pandas實現(xiàn)按行選擇的示例代碼

    這篇文章主要介紹了pandas實現(xiàn)按行選擇的示例代碼,文中通過示例代碼介紹的非常詳細,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-07-07
  • Python線程的兩種編程方式

    Python線程的兩種編程方式

    這篇文章主要介紹了Python線程的兩種編程方式,Python中如果要使用線程的話,一種是函數(shù)式,一種是用類來包裝的線程對象,需要的朋友可以參考下
    2015-04-04
  • pycharm遠程連接服務(wù)器運行pytorch的過程詳解

    pycharm遠程連接服務(wù)器運行pytorch的過程詳解

    這篇文章主要介紹了在Linux環(huán)境下使用Anaconda管理不同版本的Python環(huán)境,并通過PyCharm遠程連接服務(wù)器來運行PyTorch的過程,包括安裝PyTorch、CUDA以及配置PyCharm遠程開發(fā)環(huán)境的詳細步驟,需要的朋友可以參考下
    2025-02-02
  • Python批量解壓文件中出現(xiàn)中文亂碼的原因及解決方法

    Python批量解壓文件中出現(xiàn)中文亂碼的原因及解決方法

    這篇文章主要給大家記一次Python批量解壓文件遇中文亂碼及解決過程,文中有詳細的圖解及代碼示例,具有一定的參考價值,需要的朋友可以參考下
    2023-08-08
  • 關(guān)于PyTorch中nn.Module類的簡介

    關(guān)于PyTorch中nn.Module類的簡介

    這篇文章主要介紹了關(guān)于PyTorch中nn.Module類的簡介,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • 基于Python實現(xiàn)炸彈人小游戲

    基于Python實現(xiàn)炸彈人小游戲

    這篇文章主要介紹了基于Python中的Pygame模塊實現(xiàn)的炸彈人小游戲,文中的示例代碼講解詳細,對學(xué)習(xí)Python有一定的幫助,感興趣的小伙伴可以學(xué)習(xí)一下
    2021-12-12
  • Python條件語句的使用

    Python條件語句的使用

    python 語句是按固定順序執(zhí)行的,先執(zhí)行前面的語句,再執(zhí)行后面的語句,這篇文章主要介紹了Python條件語句的用法,需要的朋友可以參考下
    2022-08-08
  • python修改微信和支付寶步數(shù)的示例代碼

    python修改微信和支付寶步數(shù)的示例代碼

    這篇文章主要介紹了python修改微信和支付寶步數(shù)的示例代碼,本文給大家介紹的非常詳細,對大家的餓學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-10-10

最新評論