python实时绘图暂停_即使设备断开连接,使用PyQtGraph的实时绘图仍在绘制

我使用Pyserial和PyQtgraph来绘制实时数据。我正在读取数据的设备(arduino)和我的电脑之间的连接正常,我的意思是我可以读取数据。问题是当我断开设备时,数据仍在绘图中绘制。如果我让它继续读下去,过了一段时间,情节就会崩溃,我必须重新开始。在

我在看一些帖子,我发现:

所以,我认为问题在于,在我的代码中,数据被附加到一个列表中,然后被打印出来,这使得它变得很慢,也许这就是它崩溃的原因。在

这是我的代码:class MyApplication(QtGui.QApplication):

def __init__(self, *args, **kwargs):

super(MyApplication, self).__init__(*args, **kwargs)

self.t = QTime()

self.t.start()

self.data = deque()

self.cnt = 0

self.win = pg.GraphicsWindow()

self.plot = self.win.addPlot(title='Timed data')

self.curve = self.plot.plot()

self.tmr = QTimer()

self.tmr.timeout.connect(self.update)

self.tmr.start(100)

self.cnt = 0

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)

self.cnt += 1

x = self.cnt/20

self.data.append({'x': x , '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)

我如何修改我的代码以使用上述文章中所写的代码?或者,我如何绘制即将到来的数据而不将其附加到列表中?在

对不起,我是新来的PyQtGraph,我现在很困惑。希望你能帮助我。在

----------编辑---------

我尝试过一种更简单的代码:

^{pr2}$

因此,当它在命令提示符中显示数据后,我断开设备的连接,我可以看到数据仍在显示几秒钟。然后,“没有数据”文本出现。那么,有什么问题呢?我知道,这是缓冲数据,但在我看来,这和其他代码发生的情况是一样的。在

----------编辑2---------

我终于完成了我所需要的。谢谢你的帮助和耐心。在

这是update方法的代码:def update(self):

line = self.raw.read([1])

ardString = map(ord, line)

for number in ardString:

numb = float(number/77.57)

self.data.append(numb)

self.yData.append(numb)

if len (self.yData)>300 :

self.yData = []

self.raw.flush()

self.curve.setData(self.yData)

我现在要做的是将数据转移到两个不同的列表:self.yData和{}。

在self.yData中,我最多只能追加300个数据项(这是随机的,我可以选择500个),然后我刷新所有数据并“清除”列表以重新开始。在

有了这个,我可以立即看到实时数据,并将它们保存在另一个安全的地方。在

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值