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

Python Matplotlib繪制動畫的代碼詳解

 更新時間:2022年05月30日 15:07:08   作者:云朵君  
使用matplotlib可以很容易地創(chuàng)建動畫框架。在本文中我們就將利用Matplotlib制作幾個簡單的動畫,文中的示例代碼講講詳細(xì),感興趣的可以了解下

matplotlib 動畫

我們想制作一個動畫,其中正弦和余弦函數(shù)在屏幕上逐步繪制。首先需要告訴matplotlib我們想要制作一個動畫,然后必須指定想要在每一幀繪制什么。一個常見的錯誤是重新繪制每一幀的所有內(nèi)容,這會使整個過程非常緩慢。相反地,只能更新必要的內(nèi)容,因為我們知道許多內(nèi)容不會隨著幀的變化而改變。對于折線圖,我們將使用set_data方法更新繪圖,剩下的工作由matplotlib完成。

注意隨著動畫移動的終點標(biāo)記。原因是我們在末尾指定了一個標(biāo)記(markevery=[-1]),這樣每次我們設(shè)置新數(shù)據(jù)時,標(biāo)記就會自動更新并隨著動畫移動。參見下圖。

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

fig?=?plt.figure(figsize=(7,?2))
ax?=?plt.subplot()

X?=?np.linspace(-np.pi,?np.pi,?256,?endpoint=True)
C,?S?=?np.cos(X),?np.sin(X)
(line1,)?=?ax.plot(X,?C,?marker="o",?markevery=[-1],?
???????????????????markeredgecolor="white")
(line2,)?=?ax.plot(X,?S,?marker="o",?markevery=[-1],?
???????????????????markeredgecolor="white")

def?update(frame):
????line1.set_data(X[:frame],?C[:frame])
????line2.set_data(X[:frame],?S[:frame])

plt.tight_layout()
ani?=?animation.FuncAnimation(fig,?update,?interval=10)

如果我們現(xiàn)在想要保存這個動畫,matplotlib可以創(chuàng)建一個mp4文件,但是選項非常少。一個更好的解決方案是使用外部庫,如FFMpeg,它可以在大多數(shù)系統(tǒng)上使用。安裝完成后,我們可以使用專用的FFMpegWriter,如下圖所示:

writer?=?animation.FFMpegWriter(fps=30)
anim?=?animation.FuncAnimation(fig,?update,?
???????????????????????????????interval=10,
???????????????????????????????frames=len(X))
anim.save("sine-cosine.mp4",?writer=writer,?dpi=100)

注意,當(dāng)我們保存mp4動畫時,動畫不會立即開始,因為實際上有一個與影片創(chuàng)建相對應(yīng)的延遲。對于正弦和余弦,延遲相當(dāng)短,可以忽略。但對于長且復(fù)雜的動畫,這種延遲會變得非常重要,因此有必要跟蹤其進展。因此我們使用tqdm庫添加一些信息。

from?tqdm.autonotebook?import?tqdm
bar?=?tqdm(total=len(X))?
anim.save("../data/sine-cosine.mp4",?
??????????writer=writer,?dpi=300,
??????????progress_callback?=?lambda?i,?n:?bar.update(1))?
bar.close()

[Errno 2] No such file or directory: 'ffmpeg'

如果你在 macOS 上,只需通過 homebrew 安裝它:brew install ffmpeg

人口出生率

x?=?data['指標(biāo)'].values
rate=?data['人口出生率(‰)']
y?=?rate.values
xvals?=?np.linspace(2002,2021,1000)
yinterp?=?np.interp(xvals,x,y)
(line1,)?=?ax.plot(xvals,?yinterp,?marker="o",?
???????????????????markevery=[-1],?markeredgecolor="white")
text?=?ax.text(0.01,?0.95,'text',?ha="left",?va="top",?
???????????????transform=ax.transAxes,?size=25)
ax.set_xticks(x)

def?update(frame):
????line1.set_data(xvals[:frame],?yinterp[:frame])
????text.set_text("%d?年人口出生率(‰)?"?%?int(xvals[frame]))
????return?line1,?text

男女人口總數(shù)

#?設(shè)置畫布
fig?=?plt.figure(figsize=(10,?5))
ax?=?plt.subplot()
#?數(shù)據(jù)準(zhǔn)備
X?=?data['指標(biāo)']
male,?female?=data['男性人口(萬人)'],?data['女性人口(萬人)']
#?繪制折線圖
(line1,)?=?ax.plot(X,?male,?marker="o",?
???????????????????markevery=[-1],?markeredgecolor="white")
(line2,)?=?ax.plot(X,?female,?marker="o",?
???????????????????markevery=[-1],?markeredgecolor="white")
#?設(shè)置圖形注釋
text?=?ax.text(0.01,?0.75,'text',?
???????????????ha="left",?va="top",?
???????????????transform=ax.transAxes,size=20)
text2?=?ax.text(X[0],male[0],?'',?ha="left",?va="top")
text3?=?ax.text(X[0],female[0],?'',?ha="left",?va="top")
#?設(shè)置坐標(biāo)軸刻度標(biāo)簽
ax.set_xticks(X)
ax.set_yticks([])
#?設(shè)置坐標(biāo)軸線格式
ax.spines["top"].set_visible(False)
ax.spines["left"].set_visible(False)
ax.spines["right"].set_visible(False)
#?定義更新函數(shù)
def?update(frame):
????line1.set_data(X[:frame+1],?male[:frame+1])
????line2.set_data(X[:frame+1],?female[:frame+1])
????text.set_text("%d?人口(萬人)"?%?X[frame])
????text2.set_position((X[frame],?male[frame]))
????text2.set_text(f'男性:?{male[frame]}')
????text3.set_position((X[frame],?female[frame]))
????text3.set_text(f'女性:?{female[frame]}')
????return?line1,line2,?text
#?定義輸出
plt.tight_layout()
writer?=?animation.FFMpegWriter(fps=5)
#?執(zhí)行動畫
anim?=?animation.FuncAnimation(fig,?update,?interval=500,?frames=len(X))
#?存儲動畫
#?設(shè)置進度條
bar?=?tqdm(total=len(X))
anim.save(
????"num_people2.mp4",
????writer=writer,
????dpi=300,
????progress_callback=lambda?i,?n:?bar.update(1),
)
#?關(guān)閉進度條
bar.close()

雨滴

#?設(shè)置雨滴繪圖更新函數(shù)
def?rain_update(frame):
????global?R,?scatter
??#?數(shù)據(jù)獲取
????R["color"][:,?3]?=?np.maximum(0,?R["color"][:,?3]?-?1?/?len(R))
????R["size"]?+=?1?/?len(R)

????i?=?frame?%?len(R)
????R["position"][i]?=?np.random.uniform(0,?1,?2)
????R["size"][i]?=?0
????R["color"][i,?3]?=?1
????#?散點形狀設(shè)置
????scatter.set_edgecolors(R["color"])
????scatter.set_sizes(1000?*?R["size"].ravel())
????scatter.set_offsets(R["position"])
????return?(scatter,)
#?繪制畫布
fig?=?plt.figure(figsize=(6,?8),?facecolor="white",?dpi=300)
ax?=?fig.add_axes([0,?0,?1,?1],?frameon=False)??#?,?aspect=1)
#?繪制初始化散點圖
scatter?=?ax.scatter([],?[],?s=[],?
?????????????????????linewidth=0.5,?edgecolors=[],?
?????????????????????facecolors="None",cmap='rainbow')
#?設(shè)置雨滴數(shù)量
n?=?250
#?為雨滴設(shè)置參數(shù)值
R?=?np.zeros(
????n,?dtype=[("position",?float,?(2,)),?
??????????????("size",?float,?(1,)),
??????????????("color",?float,?(4,))])
R["position"]?=?np.random.uniform(0,?1,?(n,?2))
R["size"]?=?np.linspace(0,?1.5,?n).reshape(n,?1)
R["color"][:,?3]?=?np.linspace(0,?1,?n)
#?設(shè)置坐標(biāo)軸格式
ax.set_xlim(0,?1),?ax.set_xticks([])
ax.set_ylim(0,?1),?ax.set_yticks([])
#?保存同上

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

相關(guān)文章

  • 查看端口并殺進程python腳本代碼

    查看端口并殺進程python腳本代碼

    今天小編就為大家分享一篇查看端口并殺進程python腳本代碼,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 解決plt.imshow顯示cv2.imread讀取的圖像有色差發(fā)藍的四種方法問題

    解決plt.imshow顯示cv2.imread讀取的圖像有色差發(fā)藍的四種方法問題

    本文主要介紹了解決plt.imshow顯示cv2.imread讀取的圖像有色差發(fā)藍的四種方法問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • python計算機視覺實現(xiàn)全景圖像拼接示例

    python計算機視覺實現(xiàn)全景圖像拼接示例

    這篇文章主要為大家介紹了python計算機視覺實現(xiàn)全景圖像拼接示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2022-05-05
  • 對python數(shù)據(jù)清洗容易遇到的函數(shù)-re.sub bytes string詳解

    對python數(shù)據(jù)清洗容易遇到的函數(shù)-re.sub bytes string詳解

    今天小編就為大家分享一篇對python數(shù)據(jù)清洗容易遇到的函數(shù)-re.sub bytes string詳解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python?Pandas中DataFrame.drop_duplicates()刪除重復(fù)值詳解

    Python?Pandas中DataFrame.drop_duplicates()刪除重復(fù)值詳解

    在實際處理數(shù)據(jù)中,數(shù)據(jù)預(yù)處理操作中,常常需要去除掉重復(fù)的數(shù)據(jù),這篇文章主要給大家介紹了關(guān)于Python?Pandas中DataFrame.drop_duplicates()刪除重復(fù)值的相關(guān)資料,需要的朋友可以參考下
    2022-07-07
  • numpy.transpose對三維數(shù)組的轉(zhuǎn)置方法

    numpy.transpose對三維數(shù)組的轉(zhuǎn)置方法

    下面小編就為大家分享一篇numpy.transpose對三維數(shù)組的轉(zhuǎn)置方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python使用自帶的base64庫進行base64編碼和解碼的實現(xiàn)

    Python使用自帶的base64庫進行base64編碼和解碼的實現(xiàn)

    本文主要介紹了Python使用自帶的base64庫進行base64編碼和解碼的實現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python 3.74 運行import numpy as np 報錯lib\site-packages\numpy\__init__.py

    python 3.74 運行import numpy as np 報錯lib\site-packages\numpy\_

    這篇文章主要介紹了python 3.74 運行import numpy as np 報錯lib\site-packages\numpy\__init__.py,原來需要更新一下numpy即可
    2019-10-10
  • pycharm中dgl安裝報錯FileNotFoundError:Could not find module ‘E:\XXXX\XXXX\lib\site-packages\dgl\dgl.dl

    pycharm中dgl安裝報錯FileNotFoundError:Could not find&nb

    這篇文章主要介紹了pycharm中dgl安裝報錯FileNotFoundError:Could not find module ‘E:\XXXX\XXXX\lib\site-packages\dgl\dgl.dl問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • python中heapq堆排算法的實現(xiàn)

    python中heapq堆排算法的實現(xiàn)

    這篇文章主要介紹了python中heapq堆排算法的實現(xiàn),該模塊提供了堆排序算法的實現(xiàn)。堆是二叉樹,最大堆中父節(jié)點大于或等于兩個子節(jié)點,最小堆父節(jié)點小于或等于兩個子節(jié)點。下面文章更多詳細(xì)介紹,需要的小伙伴可以參考一下
    2022-05-05

最新評論

恩施市| 静宁县| 许昌市| 碌曲县| 彭山县| 叙永县| 西平县| 福清市| 哈密市| 长沙县| 白河县| 义马市| 陆良县| 奈曼旗| 青川县| 南华县| 禄劝| 太仓市| 天祝| 河东区| 翁源县| 黄梅县| 仁化县| 上栗县| 连江县| 左云县| 武义县| 龙井市| 廊坊市| 买车| 社会| 宁武县| 达尔| 璧山县| 永平县| 蓝山县| 安远县| 宁波市| 合作市| 鹿邑县| 翼城县|