简单的 matplotlib.animation 图变得非常快而且比停止更慢

我已经开始学习 matplotlib 函数,因为我想可视化我通过 websocket 接收到的数据。为此,我制作了一个模拟主程序行为的虚拟程序,但添加了 mathplotlib 的功能。我注意到该程序需要越来越多的时间来完成每个循环并最终“冻结”。我设法通过改变以延长其寿命interval在animation.FuncAnimation1000〜10000但这只是程序阴谋有时可达787-9数据的1间新的和平。我认为问题在于清理旧地块的方式不当。但我不知道我到底在哪里做错了


import time

import datetime

import timeit

import queue

import os

import random

import copy

import matplotlib.pyplot as plt

import matplotlib.animation as animation


q = queue.Queue()

beta=[0,]

b=False

czas=[]

produkty=["primo"]

cena=[[] for _ in range(len(produkty))]



fig=plt.figure()

#ax1=fig.add_subplot(1,1,1)

#ax2=fig.add_subplot(1,1,1)

ax1=plt.subplot(1,1,1)

ax2=plt.subplot(1,1,1)

def animate(i):

    ax1.clear()

    ax2.clear()

    ax1.plot(czas,cena[0])

    ax2.plot(czas,beta)



while True:

    time.sleep(1)

    alpfa=time.time()

    #input('press enter')

    rand_produkt=random.choice(produkty) 

    rand_price=random.randint(1,10)

    rand_czas=time.ctime()

    alfa={'type':'ticker','price':rand_price,'product_id':rand_produkt,'time':rand_czas}

    q.put(alfa)

    if q.not_empty:            

        dane=q.get()        

        typ=dane.get('type',None)

        if typ=='ticker':

            price=dane.get('price', None)

            pair=dane.get('product_id',None)

            t=dane.get('time', None)

            b=True

    if b==True:

        b=False


        produkt_id=produkty.index(pair)

        cena[produkt_id].append(float(price))

        czas.append(t)



    plt.ion()

    ani=animation.FuncAnimation(fig,animate,interval=1000)#, blit=True)repeat=True)

    plt.show()

    plt.pause(0.001)

    #fig.clf()

    beta.append(time.time()-alpfa)

    print(beta[-1])


撒科打诨
浏览 326回答 1
1回答

翻翻过去那场雪

您的代码的问题在于您在 while 循环中调用了一个新动画。因此,这将导致线路变慢。最好开始你的情节。一种技巧可能是直接更新对象数据:from matplotlib.pyplot import subplots, pause, showfrom numpy import sin, pifig, ax = subplots()x = [0]y = [sin(2 * pi * x[-1])]p1, = ax.plot(x, y) show(block = False)while True:    # update data    x.append(x[-1] + .1)    y.append(sin(2 * pi * x[-1]))    p1.set_data(x, y) # update data    ax.relim()        # rescale axis    ax.autoscale_view()# update view    pause(1e-3)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python