В настоящее время я пишу скрипт на python с pyserial и pyqtgraph, который отображает данные, поступающие с акселерометра через последовательный порт.Я добавляю эти данные в массив int и использую его для обновления графика.На данный момент ширина моего графика составляет 500 (я отображаю только самые последние 500 элементов), и я «прокручиваю» или «прокручиваю», добавляя элемент в конец и выталкивая с самого начала.
data1 = [0] * 500
def update():
global curve1, data1, x, ser
if(ser != None): ## serial object. defined via a QPushButton event
line = ser.readline()
csv = line.decode().split(',')
if len(csv) == 2:
data1.append(int(csv[1]))
data1.pop(0)
xdata1 = np.array(data1[-500:], dtype='int')
curve1.setData(xdata1)
x += 1
curve1.setPos(x, 0)
app.processEvents()
Этот метод обновления вызывается объектом QtTimer для обновления окна графика
timer = QtCore.QTimer()
timer.timeout.connect(update)
timer.start(0)
Таким образом, я избегаю массива, который продолжает расти, а также избегаю копирования значений путем смещения элементов влево.Мой график, однако, противоречив и иногда отстает (когда я перемещаю датчик, график реагирует несколько секунд спустя).Это из-за того, что я перевожу свои данные неэффективно?