В настоящее время я делаю проект, который считывает 8 датчиков и графиков реального времени. Я использовал Matplotlib, но он был медленным, поэтому я переключился на pyqtgraph. Это сравнительно очень быстро. Я ссылался на документацию и разработал простой код, который отображает данные в реальном времени. Единственная проблема, с которой я столкнулся, - это дисковое пространство, и использование процессора резко возрастает, так как я позволяю ему рисовать 20 минут или около того. Вот мой код.PyQtGraph и numpy realtime plot
from tinkerforge.ip_connection import IPConnection
from tinkerforge.bricklet_ptc import BrickletPTC
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
win = pg.GraphicsWindow(title="Basic plotting examples")
win.resize(1280,720)
win.setWindowTitle('Live Temperature Data')
#Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)
p1 = win.addPlot(title = 'Sensor1')
curve1 = p1.plot(pen = '#00A3E0')
p1.setLabel('left', "Temperature", units='°C')
p1.setLabel('bottom', "Time", units= 's')
p1.setDownsampling(auto=True,mode='peak')
p1.setClipToView(True)
p1.showGrid(x=True, y=True)
tempC1 = []
def updateSensor1():
global curve1, tempC1, indx1, p1
ipcon = IPConnection() # Create IP connection
ptc1 = BrickletPTC(UID1, ipcon) # S1
ipcon.connect(HOST, PORT) # Connect to brickd
temperature1 = ptc1.get_temperature()
dataArray1=str(temperature1/100).split(',')
temp1 = float(dataArray1[0])
tempC1.append(temp1)
curve1.setData(tempC1)
app.processEvents()
timer1 = QtCore.QTimer()
timer1.timeout.connect(updateSensor1)
timer1.start(1000)
if __name__ == '__main__':
import sys
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_'):
QtGui.QApplication.instance().exec_()
Я слышал, что списки намного медленнее, а numpy очень быстро и гораздо более совместимо с pyqtgraph. Поскольку я новичок в этом программном материале, я не могу создать массив numpy, который принимает эти показания температуры и отображает график. Я также ссылался на документацию, но это не помогло.
Ps sicne У меня есть 8 датчиков. Я понятия не имею, должен ли я создавать 8 различных массивов numpy или что-то вроде одного многомерного массива, который принимает значения датчиков и функцию, которая отображает эти values in real time
Я был бы признателен, если кто-то может помочь мне создать массивы numpy вместо списков.
Благодарим вас за ценный учебник. Как-то я сделал мой предыдущий код более эффективным, и он отлично работает со списком. Единственная проблема заключается в том, что у меня есть некоторое время с реальным временем (50 секунд для Hr). Как вы думаете, Numpy поможет искоренить это отставание и сделать его реальным временем? Кроме того, чтобы сделать мою программу более эффективной, я пытаюсь «tempC1.pop (0) 'списки, когда счетчик достигает 300 секунд. Поп-функции хороши, но ось x остается на 0-300. Есть ли способ, по которому я могу поместить элементы списка, пока ось показывает реальное время даже после того, как вы увидите значения в списке? – Ajay
Я не думаю, что отставание происходит от использования списка, если у вас в нем максимум 300 значений. Проверьте мои изменения относительно проблемы оси x. –
Он работает абсолютно нормально. Еще раз спасибо .. – Ajay