我已经开始学习 matplotlib 函数,因为我想可视化我通过 websocket 接收到的数据。为此,我制作了一个模拟主程序行为的虚拟程序,但添加了 mathplotlib 的功能。我注意到该程序需要越来越多的时间来完成每个循环并最终“冻结”。我设法通过改变以延长其寿命interval在animation.FuncAnimation1000〜10000但这只是程序阴谋有时可达787-9数据的1间新的和平。我认为问题在于清理旧地块的方式不当。但我不知道我到底在哪里做错了import timeimport datetimeimport timeitimport queueimport osimport randomimport copyimport matplotlib.pyplot as pltimport matplotlib.animation as animationq = queue.Queue()beta=[0,]b=Falseczas=[]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])
1 回答
翻翻过去那场雪
TA贡献2065条经验 获得超14个赞
您的代码的问题在于您在 while 循环中调用了一个新动画。因此,这将导致线路变慢。最好开始你的情节。一种技巧可能是直接更新对象数据:
from matplotlib.pyplot import subplots, pause, show
from numpy import sin, pi
fig, 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)
添加回答
举报
0/150
提交
取消