【发布时间】:2023-04-06 23:09:01
【问题描述】:
我正在尝试使用 pyqtgraph 进行实时绘图。我正在使用 Pyserial 从和 arduino 读取数据。我在使用 pyqtgraph 之前尝试了 matplotlib 库,但它没有给我需要绘制的速度。因此,在寻找另一种绘制实时数据的方法时,我遇到了 PyQtgraph。我阅读了文档和大量示例,并找到了以下两个示例:
两者都是作为时间的函数绘制的,这是我需要做的。我已经修改了它们中的每一个以使用 Pyserial 从 Arduino 获取数据。问题是它仍然画得很慢。
这是我正在使用的代码(来自第二个链接):
class TimeAxisItem(pg.AxisItem):
def __init__(self, *args, **kwargs):
super(TimeAxisItem, self).__init__(*args, **kwargs)
def tickStrings(self, values, scale, spacing):
return [QTime().addMSecs(value).toString('mm:ss') for value in values]
class MyApplication(QtGui.QApplication):
def __init__(self, *args, **kwargs):
super(MyApplication, self).__init__(*args, **kwargs)
self.t = QTime()
self.t.start()
self.data = deque(maxlen=20)
self.win = pg.GraphicsWindow(title="Basic plotting examples")
self.win.resize(1000,600)
self.plot = self.win.addPlot(title='Timed data', axisItems={'bottom': TimeAxisItem(orientation='bottom')})
self.curve = self.plot.plot()
self.tmr = QTimer()
self.tmr.timeout.connect(self.update)
self.tmr.start(100)
print "Opening port"
self.raw=serial.Serial("com4",9600)
print "Port is open"
def update(self):
line = self.raw.read()
ardString = map(ord, line)
for number in ardString:
numb = float(number/77.57)
print numb
self.data.append({'x': self.t.elapsed(), 'y': numb})
x = [item['x'] for item in self.data]
y = [item['y'] for item in self.data]
self.curve.setData(x=x, y=y)
def main():
app = MyApplication(sys.argv)
sys.exit(app.exec_())
if __name__ == '__main__':
main()
随着时间的推移,我该怎么做才能更快地绘制?我似乎在使用这段代码丢失了一些数据。
真的希望你能帮助我。
【问题讨论】:
-
您可以使用Python Profiler 调查哪些函数使用的执行时间最多。我真的建议你试试看。
标签: python plot pyqt4 pyqtgraph