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

python多線程實(shí)現(xiàn)動(dòng)態(tài)圖繪制

 更新時(shí)間:2022年04月15日 13:42:18   作者:淺若清風(fēng)cyf?  
這篇文章主要介紹了python多線程實(shí)現(xiàn)動(dòng)態(tài)圖繪制,文章基于Python的相資料展開動(dòng)態(tài)圖的繪制相關(guān)內(nèi)容,具有一定的參考價(jià)值,需要的小伙伴可以參考一下

一、背景

有些情況下,我們面對(duì)實(shí)時(shí)更新的數(shù)據(jù),希望能夠在一個(gè)窗口中可視化出來,并且能夠?qū)崟r(shí)更新,方便我們觀察數(shù)據(jù)的變化,從而進(jìn)行數(shù)據(jù)分析,例如:繪制音頻的波形,繪制動(dòng)態(tài)曲線等,下面介紹使用matplotlib結(jié)合多線程繪制動(dòng)態(tài)圖,希望能幫助到有需要的朋友。

遇到的場景:最近剛好在學(xué)習(xí)人工智能中的遺傳算法,并且使用該算法求解TSP,了解這個(gè)算法的朋友知道這個(gè)算法是通過不斷迭代,尋找適應(yīng)度大的最優(yōu)解,為了了解迭代過程中適應(yīng)度的變化,我希望能夠?qū)崟r(shí)更新迭代過程中的適應(yīng)度,將其可視化出來(數(shù)據(jù)量不斷增大)

直接上圖:

二、步驟

1、使用matplotlib繪制動(dòng)態(tài)圖

  • 工具:matplotlib.animation

2、創(chuàng)建一個(gè)線程用于更新數(shù)據(jù)

  • threading

三、代碼框架

# Author: 淺若清風(fēng)cyf
# Date: 2020/12/11

import threading
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import matplotlib.lines as line
import numpy as np

CHUNK = 2048  # 初始數(shù)據(jù)量
data=np.random.normal(0,1,CHUNK)  # 存放數(shù)據(jù),用于繪制圖像,數(shù)據(jù)類型可為列表

# 定義畫布
fig = plt.figure()
ax = plt.subplot(111,ylim=(0,5))
line = line.Line2D([], [])  # 繪制直線

# 初始化圖像
def plot_init():
    ax.add_line(line)
    return line, # 必須加逗號(hào),否則會(huì)報(bào)錯(cuò)(TypeError: 'Line2D' object is not iterable)

# 更新圖像(animation會(huì)不斷調(diào)用此函數(shù)刷新圖像,實(shí)現(xiàn)動(dòng)態(tài)圖的效果)
def plot_update(i):
    global data  # data為全局變量
    data_copy = data.copy()  # 為避免線程不同步導(dǎo)致獲取到的data在繪制圖像時(shí)被更新,這里復(fù)制數(shù)據(jù)的副本,否則繪制圖像的時(shí)候可能會(huì)出現(xiàn)x和y的數(shù)據(jù)維度不相等的情況
    x_data=np.arange(0,data_copy.shape[0],1)  # x軸根據(jù)y軸數(shù)據(jù)自動(dòng)生成(可根據(jù)需要修改)
    ax.set_xlim(0,data_copy.shape[0])  # 橫坐標(biāo)范圍(橫坐標(biāo)的范圍和刻度可根據(jù)數(shù)據(jù)長度更新)
    ax.set_title("title",fontsize=8)  # 設(shè)置title
    line.set_xdata(x_data)  # 更新直線的數(shù)據(jù)
    line.set_ydata(data_copy)  # 更新直線的數(shù)據(jù)
	# 大標(biāo)題(若有多個(gè)子圖,可為其設(shè)置大標(biāo)題)
    plt.suptitle('Suptitle',fontsize=8)
    # 重新渲染子圖
    ax.figure.canvas.draw()  # 必須加入這一行代碼,才能更新title和坐標(biāo)!!!
    return line,  # 必須加逗號(hào),否則會(huì)報(bào)錯(cuò)(TypeError: 'Line2D' object is not iterable)

# 繪制動(dòng)態(tài)圖
ani = animation.FuncAnimation(fig,   # 畫布
							  plot_update,  # 圖像更新
                              init_func=plot_init,  # 圖像初始化
                              frames=1,
                              interval=30,  # 圖像更新間隔
                              blit=True)

# 數(shù)據(jù)更新函數(shù)
def dataUpdate_thead():
    global data
    # 為了方便理解代碼,這里生成正態(tài)分布的隨機(jī)數(shù)據(jù)
    while True:  # 為了方便測試,讓數(shù)據(jù)不停的更新
	    data=np.random.normal(0,1,CHUNK)

# 為數(shù)據(jù)更新函數(shù)單獨(dú)創(chuàng)建一個(gè)線程,與圖像繪制的線程并發(fā)執(zhí)行
ad_rdy_ev = threading.Event()
ad_rdy_ev.set()  # 設(shè)置線程運(yùn)行
t = threading.Thread(target=dataUpdate_thead, args=()) # 更新數(shù)據(jù),參數(shù)說明:target是線程需要執(zhí)行的函數(shù),args是傳遞給函數(shù)的參數(shù))
t.daemon = True
t.start()  # 線程執(zhí)行

plt.show() # 顯示圖像(0,1,CHUNK)

# 為數(shù)據(jù)更新函數(shù)單獨(dú)創(chuàng)建一個(gè)線程,與圖像繪制的線程并發(fā)執(zhí)行
ad_rdy_ev = threading.Event()
ad_rdy_ev.set()  # 設(shè)置線程運(yùn)行
t = threading.Thread(target=dataUpdate_thead, args=()) # 更新數(shù)據(jù),參數(shù)說明:target是線程需要執(zhí)行的函數(shù),args是傳遞給函數(shù)的參數(shù))
t.daemon = True
t.start()  # 線程執(zhí)行

plt.show() # 顯示圖像

效果:

到此這篇關(guān)于python多線程實(shí)現(xiàn)動(dòng)態(tài)圖繪制的文章就介紹到這了,更多相關(guān)python繪制動(dòng)態(tài)圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Python自定義模塊的創(chuàng)建與使用

    Python自定義模塊的創(chuàng)建與使用

    這篇文章主要給大家介紹了關(guān)于Python自定義模塊創(chuàng)建與使用的相關(guān)資料,文中還給大家分享了python打包用戶自定義模塊的方法,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-05-05
  • 解決python執(zhí)行較大excel文件openpyxl慢問題

    解決python執(zhí)行較大excel文件openpyxl慢問題

    這篇文章主要介紹了解決python執(zhí)行較大excel文件openpyxl慢問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Flask框架運(yùn)用Ajax實(shí)現(xiàn)輪詢動(dòng)態(tài)繪圖

    Flask框架運(yùn)用Ajax實(shí)現(xiàn)輪詢動(dòng)態(tài)繪圖

    Ajax是異步JavaScript和XML可用于前后端交互,本文將通過Ajax輪詢獲取后端的數(shù)據(jù),前臺(tái)使用echart繪圖庫進(jìn)行圖形的生成與展示,最后實(shí)現(xiàn)動(dòng)態(tài)監(jiān)控內(nèi)存利用率的這個(gè)功能,需要的可以參考一下
    2022-11-11
  • 淺談機(jī)器學(xué)習(xí)需要的了解的十大算法

    淺談機(jī)器學(xué)習(xí)需要的了解的十大算法

    這篇文章主要介紹了淺談機(jī)器學(xué)習(xí)需要的了解的十大算法,具有一定借鑒價(jià)值,需要的朋友可以參考下。
    2017-12-12
  • Python正則表達(dá)式中的'r'用法總結(jié)

    Python正則表達(dá)式中的'r'用法總結(jié)

    正則表達(dá)式即使用一個(gè)字符串來描述、匹配一系列某個(gè)語法規(guī)則的字符串,python中r作用是除去''里面轉(zhuǎn)意字符,在pyhton自動(dòng)化中比較常用的,下面這篇文章主要給大家介紹了關(guān)于Python正則表達(dá)式中的'r'用法總結(jié)的相關(guān)資料,需要的朋友可以參考下
    2023-04-04
  • 弄清Pytorch顯存的分配機(jī)制

    弄清Pytorch顯存的分配機(jī)制

    這篇文章主要介紹了Pytorch顯存的分配機(jī)制的相關(guān)資料,幫助大家更好的理解和使用Pytorch,感興趣的朋友可以了解下
    2020-12-12
  • Python中的OpenCV圖像腐蝕處理和膨脹處理

    Python中的OpenCV圖像腐蝕處理和膨脹處理

    這篇文章主要介紹了Python中的OpenCV圖像腐蝕處理和膨脹處理,OpenCV是一個(gè)跨平臺(tái)的計(jì)算機(jī)視覺庫,可用于開發(fā)實(shí)時(shí)的圖像處理、計(jì)算機(jī)視覺以及模式識(shí)別程序,需要的朋友可以參考下
    2023-08-08
  • python微信跳一跳系列之色塊輪廓定位棋盤

    python微信跳一跳系列之色塊輪廓定位棋盤

    這篇文章主要為大家詳細(xì)介紹了python微信跳一跳系列,色塊輪廓定位棋盤,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • selenium設(shè)置proxy、headers的方法(phantomjs、Chrome、Firefox)

    selenium設(shè)置proxy、headers的方法(phantomjs、Chrome、Firefox)

    這篇文章主要介紹了selenium設(shè)置proxy、headers的方法(phantomjs、Chrome、Firefox),小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-11-11
  • python同步windows和linux文件

    python同步windows和linux文件

    這篇文章主要為大家詳細(xì)介紹了python同步windows和linux文件,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-08-08

最新評(píng)論