У меня есть датчик, и мне нужно наносить данные в режиме реального времени, используя Python. У меня есть поток, который заполняет буфер, содержащий данные для показа.
data = deque([], maxlen=512) #Sample raw received
fig = plt.figure()
ax = plt.axes(xlim=(0, 50), ylim=(0, 4000))
ax.set_autoscaley_on(False)
#Buffered arays to plot, max lenght 50
x = [0]
y = [0]
line, = ax.plot([], [], lw=1)
Я использую matplotlib.animation, и это моя "одушевленная" функция
def animate(i,x,y):
if data:
y.append(data.pop()) #consume a sample
else:
y.append(0) #padd
x.append(x[-1]+1) #sample name
# Limit x and y lists to 50 items
x = x[-50:]
y = y[-50:]
ax.clear()
ax.plot(x, y)
line.set_data(x, y)
return line,
Я показываю рисунок с :
anim = animation.FuncAnimation(fig, animate, fargs=(x, y),
frames=200, interval=10, blit=True)
plt.show()
Я могу достичь своей цели, установив blit=False
и удалив return line,
в функции анимации, но Python переназначит все, и это очень и очень медленно. Мне нужно только обновить новые данные. Если я установлю blit=True
и использую код return line,
, я не увижу сюжет движущимся.
Я много искал в Интернете, но, похоже, ничего не работает так, как мне нужно. Как я могу очень быстро обновить свой сюжет?