Я делаю живой плоттер, чтобы показать аналоговые изменения от датчика Arduino. Arduino выводит значение в последовательный порт со скоростью 9600 бод. Код Python выглядит следующим образом:
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import serial
import time
ser = serial.Serial("com3", 9600)
ser.readline()
optimal_frequency = 100
fig = plt.figure(figsize=(6, 6))
ax1 = fig.add_subplot(1, 1, 1)
# the following arrays must be initialized outside the loop
xar = []
yar = []
print(time.ctime())
def animate(i):
global b, xar, yar # otherwise a
for i in range(optimal_frequency):
a = str(ser.readline(), 'utf-8')
try:
b = float(a)
except ValueError:
ser.readline()
xar.append(str(time.time()))
yar.append(b)
ax1.clear()
ax1.plot(xar, yar)
ani = animation.FuncAnimation(fig, animate, interval=optimal_frequency)
plt.show()
Я получаю нормальное время отклика на графике, но когда я рисую более 20 минут, время реакции увеличивается примерно до 1 минуты. т.е. для обновления графика с новыми значениями требуется 1 минута. Я также пробовал с PyQtGraph, но это задерживается с самого начала.
Помимо задержки на время более 20 минут, я получаю некоторые выбросы и недолеты в сюжете.
Любая помощь?