matplotlib實現動畫

2021-10-09 16:36:03 字數 4180 閱讀 4770

原始動畫繪製

1.在繪製圖形,影象過程中,可以借助繪製時間的控制,逐步顯示繪製內容,進而達到圖形,

影象動態顯示的效果

用plot()和scatter()繪製正弦波和散點圖,其中散點圖是動態沿著正弦波繪製.實現**如下(我的測試環境是idie,如果是jupyter notebook環境下,效果不是很明顯)

import matplotlib.pyplot as plt

import numpy as np

fig = plt.figure(

)ax = fig.add_subplot(

111)

x = np.linspace(0,

2*np.pi,

300)

#正弦x軸上乙個週期360度的弧度值

y = np.sin(

3*x)+5

#乙個週期內振盪頻率為3,在y軸上向上移動5

plt.plot(x,y,color=

'r')

#繪製正弦波圖形

x1 = x[::

2]y1 = y[::

2]i =0

for pos in x1:

#彈出乙個x軸值,然後獲取對應的y軸值,繪製散點圖

ax.scatter(pos,y1[i]

,c='b'

,marker=

'.')

#按照正弦波方向繪製散點圖

i +=

1 plt.pause(

0.008

)#迴圈一次暫停0.008秒一下

plt.show(

)

如果是在jupyter notebook環境下需要在開頭加入以下兩行**:

2.draw()方法plt.draw()可以根據提供的新資料,重新在資料區域繪製相應的新圖形。

要改變,需要通過類似plt.plot(),plt.scatter()繪製工具返回的例項 ax 所附帶的ax.set_xdata(x),ax.set_ydata(y)改變原先圖形的x,y座標範圍,以達到改變圖形的目的.至於動畫效果,則是通過時間間隔的控制,讓plt.draw有規律地反覆重新繪製圖幀,實現幀的動態替換。

1)簡單重畫設定

這裡採用plt.draw()函式,根據plt.plot()繪圖工具x,y座標的變化,而重新動態繪製。**如下

import numpy as np

import math

import matplotlib.pyplot as plt

from time import sleep

plt.subplots(

)xmax =

500x = np.linspace(0,

2*np.pi,xmax)

y = np.sin(x)

plt.plot(x,y,

'b--'

)#設定軌跡虛線

sleep(

0.5)

ax,= plt.plot(x,y,

'ro'

)

i =0

while i <= xmax:

plt.pause(

0.002

)#暫停0.002秒,功能同sleep()

y1 = np.sin(x[

:i])

#這裡採用逐步增加y軸值範圍的方法

ax.set_xdata(x[

:i])

#這裡採用逐步增加x軸值範圍的方法

ax.set_ydata(y1)

plt.draw(

)#重畫已經修改的圖形

i +=

2#獲取範圍控制,兼迴圈控制

2. 帶按鈕控制動畫下列**採用 draw()方法重新繪製給予值的圖形,實質上也是通過 sleep()來控制繪製進度,實現動態繪製的效果.

import numpy as np

from threading import thread

import math

import matplotlib.pyplot as plt

from time import sleep

from matplotlib.widgets import button #匯入按鈕物件

fig,ax = plt.subplots(

)#實驗資料

x = np.arange(0,

1,0.001

)y = np.sin(

4*np.pi*x)

*np.exp(

-x)

ax,= plt.plot(x,y,lw=

1,marker=

'd',color=

'c')

class

buttonhandler

:#自定義按鈕事件類,封裝了單擊事件的開始方法和停止方法

def__init__

(self)

: self.flag =

true

#是否啟動執行緒,動態處理繪製過程

self.x_s,self.x_e,self.x_step =0,

1,0.01

defthreadstart

(self)

:#執行緒開始函式,用來更新資料並重新繪製圖形

while self.flag:

sleep(

0.02

) self.x_s += self.x_step #開始位置一次加0.01

self.x_e += self.x_step #結束位置一次加0.01

x1 = np.arange(self.x_s,self.x_e,self.x_step)

y1 = np.sin(

4*np.pi*x1)

*np.exp(

-x1)

#輸出y軸範圍值

ax.set_xdata(x1-x1[0]

)#重新繪製新繪製區域x,y資料

ax.set_ydata(y1)

plt.draw(

)#重新繪製圖形

defstart

(self,event)

: self.flag =

true

t1 = thread(target=self.threadstart)

#建立並啟動執行緒

t1.start(

)def

stop

(self,event)

: self.flag =

false

callback = buttonhandler(

)#利用兩個新的axes區域,建立按鈕並設定單擊事件處理函式

Matplotlib繪製3D動畫

使用matplotlib繪製3d的頻譜圖,效果如下 使用matplotlib繪製3d的波束掃瞄,效果如下 python 如下 usr bin env python coding utf 8 from mpl toolkits.mplot3d import axes3d import matplotl...

Matplotlib繪製混淆矩陣的實現

對於機器www.cppcns.com學習多分類模型來說,其評價指標除了精度之外,常用的還有混淆矩陣和分類報告,下面來展示一下如何繪製混淆矩陣,這在 中經常會用到。如下 import itertools import matplotlib.pyplot as plt import numpy as n...

animation iOS實現動畫

uiview動畫 動畫特點 全部都是類方法 直接類去呼叫 1.uiview 直接呼叫的 2.block方法 步驟 1.開始動畫 2.中間寫你要執行的動畫 3.提交動畫 開始動畫 引數1 動畫的id 引數2 攜帶的引數 uiview beginanimations donghua context ha...