第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問題,去搜搜看,總會(huì)有你想問的

Matplotlib / PyPlot中的快速實(shí)時(shí)繪圖

Matplotlib / PyPlot中的快速實(shí)時(shí)繪圖

ibeautiful 2019-09-02 10:11:03
多年來,我一直在努力在matplotlib中獲得有效的實(shí)時(shí)繪圖,直到今天我仍然不滿意。我想要一個(gè)redraw_figure更新圖形“實(shí)時(shí)”(如代碼運(yùn)行)的函數(shù),并且如果我在斷點(diǎn)處停止,將顯示最新的圖。這是一些演示代碼:import timefrom matplotlib import pyplot as pltimport numpy as npdef live_update_demo():    plt.subplot(2, 1, 1)    h1 = plt.imshow(np.random.randn(30, 30))    redraw_figure()    plt.subplot(2, 1, 2)    h2, = plt.plot(np.random.randn(50))    redraw_figure()    t_start = time.time()    for i in xrange(1000):        h1.set_data(np.random.randn(30, 30))        redraw_figure()        h2.set_ydata(np.random.randn(50))        redraw_figure()        print 'Mean Frame Rate: %.3gFPS' % ((i+1) / (time.time() - t_start))def redraw_figure():    plt.draw()    plt.pause(0.00001)live_update_demo()在運(yùn)行代碼時(shí),繪圖應(yīng)該更新,并且我們應(yīng)該在之后的任何斷點(diǎn)處停止時(shí)看到最新數(shù)據(jù)redraw_figure()。問題是如何最好地實(shí)施redraw_figure()在上面的實(shí)現(xiàn)(plt.draw(); plt.pause(0.00001))中,它可以工作,但速度非常慢(~3.7FPS)我可以實(shí)現(xiàn)它:def redraw_figure():    plt.gcf().canvas.flush_events()    plt.show(block=False)并且它運(yùn)行得更快(~11FPS),但是當(dāng)您在斷點(diǎn)處停止時(shí),情節(jié)不是最新的(例如,如果我在線上放置斷點(diǎn)t_start = ...,則不會(huì)出現(xiàn)第二個(gè)圖)。奇怪的是,實(shí)際上工作的是兩次調(diào)用節(jié)目:def redraw_figure():    plt.gcf().canvas.flush_events()    plt.show(block=False)    plt.show(block=False)如果你在任何一條線上中斷,那么它可以提供~11FPS,并且可以將圖表保持為數(shù)據(jù)?,F(xiàn)在我聽說它已經(jīng)棄用了“block”關(guān)鍵字。并且兩次調(diào)用相同的函數(shù)似乎是一個(gè)奇怪的,可能是非便攜式的hack。那么我可以在這個(gè)以合理的幀速率繪制的函數(shù)中加入什么,不是一個(gè)巨大的kludge,最好能在后端和系統(tǒng)中工作?一些說明:我在OSX上,并使用TkAgg后端,但歡迎任何后端/系統(tǒng)上的解決方案交互模式“開啟”不起作用,因?yàn)樗粫?huì)實(shí)時(shí)更新。它只是在解釋器等待用戶輸入時(shí)在Python控制臺(tái)中更新。一篇博客建議實(shí)施:def redraw_figure():fig = plt.gcf()fig.canvas.draw()fig.canvas.flush_events()但至少在我的系統(tǒng)上,根本沒有重繪圖。所以,如果有人有答案,你會(huì)直接讓我和其他成千上萬(wàn)的人非常高興。他們的快樂可能會(huì)流向他們的朋友和親戚,他們的朋友和親戚等等,這樣你就有可能改善數(shù)十億人的生活。結(jié)論ImportanceOfBeingErnest展示了如何使用blit進(jìn)行更快的繪圖,但它并不像在redraw_figure函數(shù)中放置不同的東西那么簡(jiǎn)單(你需要跟蹤要重繪的內(nèi)容)。
查看完整描述

3 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個(gè)贊

這是進(jìn)行實(shí)時(shí)繪圖的一種方法:將繪圖作為圖像陣列,然后將圖像繪制到多線程屏幕。


使用pyformulas屏幕(~30 FPS)的示例:


import pyformulas as pf

import matplotlib.pyplot as plt

import numpy as np

import time


fig = plt.figure()


screen = pf.screen(title='Plot')


start = time.time()

for i in range(10000):

    t = time.time() - start


    x = np.linspace(t-3, t, 100)

    y = np.sin(2*np.pi*x) + np.sin(3*np.pi*x)

    plt.xlim(t-3,t)

    plt.ylim(-3,3)

    plt.plot(x, y, c='black')


    # If we haven't already shown or saved the plot, then we need to draw the figure first...

    fig.canvas.draw()


    image = np.fromstring(fig.canvas.tostring_rgb(), dtype=np.uint8, sep='')

    image = image.reshape(fig.canvas.get_width_height()[::-1] + (3,))


    screen.update(image)


#screen.close()

免責(zé)聲明:我是pyformulas的維護(hù)者


查看完整回答
反對(duì) 回復(fù) 2019-09-02
?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個(gè)贊

我認(rèn)為看看這與matplotlib FuncAnimation的比較會(huì)有所幫助。由于這也繪制了matplotlib figure(fig.canvas.draw()),它肯定不會(huì)更快

查看完整回答
反對(duì) 回復(fù) 2019-09-02
  • 3 回答
  • 0 關(guān)注
  • 3517 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)