使用funcanimation实时画图的数据无变化

我在使用python funcanimation画图,数据是从arduino实时传输过来的。但是我的代码结果显示,在终端打印出来的数据没有根据arduino端的sensor变化而变化。


import matplotlib.pyplot as plt
import matplotlib.animation as animation
import serial
import time

#ser = serial.Serial('/dev/ttyUSB0', 1000000)
#ser.readline()



#fig = plt.figure(figsize=(6, 6))
#ax1 = fig.add_subplot(1, 1, 1)
fig, ax = plt.subplots()
#ax = plt.axes(xlim=(0, 100), ylim=(0, 5000))
ax = plt.axes(ylim=(0, 5000))
line, = ax.plot([],[])
xar = []
yar = []
ser = serial.Serial('/dev/ttyUSB0', 1000000)
def init():
    line, = ax.plot([], [])
    return line,

def animate(i):
    #global b, xar, yar # otherwise a
    
    #ser.readline()
    
    raw = ser.readline()[:-1]
    a = raw.decode('utf-8')
    
    try:
        b = float(a)
        print(b)
        xar.append((time.time()))
        yar.append(b)
    except: pass
    line.set_xdata(xar)
    line.set_ydata(yar)
    #line.set_data(xar, yar)
    #ax.set_ylim([0, 5000])
    ax.plot(xar, yar)
    #ax.plot(yar)
    return line,

ani = animation.FuncAnimation(fig, animate, init_func=init, interval=150, blit=True)
plt.show(block=False)

我可以看到成功画图,但是打印的数据一直保持在5000多。于是我回到arduino serial monitor检查,当sensor被激活时,数据可以马上从5000多变到3000多,证明arduino端没有问题。

于是我检查了从arduino是否成功传输了数据到python。简单的使用print(serial.readline(), 我可以看到终端数据跟着sensor变化,证明传输成功。

所以我觉得问题在画图,但不知道如何修改代码。我希望我可以无延迟敏捷的把Arduino数据画图在python上。谢谢

你好,我是有问必答小助手,非常抱歉,本次您提出的有问必答问题,技术专家团超时未为您做出解答


本次提问扣除的有问必答次数,将会以问答VIP体验卡(1次有问必答机会、商城购买实体图书享受95折优惠)的形式为您补发到账户。


因为有问必答VIP体验卡有效期仅有1天,您在需要使用的时候【私信】联系我,我会为您补发。