使用PyQtGraph和Pyserial及时绘图

时间:2016-04-29 12:23:52

标签: python plot pyqt4 pyqtgraph

我正在尝试使用pyqtgraph进行实时绘图。我正在使用Pyserial从和arduino读取数据。我在使用pyqtgraph之前尝试了matplotlib库,但它没有给我我需要绘制的速度。因此,搜索另一种绘制实时数据的方法,我遇到了PyQtgraph。我阅读了文档和很多例子,我发现了这两个例子:

pltting with sample interval

plotting using pyqt4

两者都是作为时间的函数绘制的,这是我需要做的。我已修改它们中的每一个以使用Pyserial从Arduino获取数据。问题是它仍然很慢。

这是我正在使用的代码(来自第二个链接):

web.xml

我可以做些什么来随着时间的推移更快地绘制?似乎我用这段代码丢失了一些数据。

真的希望你能帮帮我。

2 个答案:

答案 0 :(得分:0)

在更新功能中,尝试调用

self.curve.clear()

在函数的最开始。

答案 1 :(得分:0)

稍微偏离的是这里发生的事情的时间,而不是pyqtgraph细节。您的更新方法是按照QTimer对象以100ms的间隔轮询串行端口,因此在9600波特率下,您的端口可以生成9600bps * .1sec = 960字节。但是,没有参数的serial.Serial.read()默认为size = 1:http://pyserial.readthedocs.io/en/latest/pyserial_api.html#serial.Serial.read

因此,您似乎在更新调用中每100毫秒只读取1个字节:

line = self.raw.read()

所以我的猜测是你应该在读取大小中加入更合理的东西,1024:

line = self.raw.read(1024)

在serial.Serial实例中指定超时:

self.raw=serial.Serial("com4",9600,timeout=0)

这样,读取不会阻塞,只返回缓冲区中可用的全部数据。