寻找一种在pyqtgraph中加快实时绘图的方法

时间:2019-05-15 16:11:53

标签: python pyqtgraph graphing

简而言之,我正在尝试找到一种更快的方法来绘制通过串行输入的实时数据。数据看起来像座标(x,y),每秒大约有40个。流将数据存储在数组中,使用x作为索引并将y设置为其值。这部分正在穿线。尽管流可以立即读取数据,但是pyqtgraph库无法跟上这种速度。

这是我绘制数据的代码部分。 distance和theta变量是具有6400个索引的数组。它们已转换为极坐标值,并在每次迭代时进行绘制。我在其中添加了一个延迟,只是为了保持实时性,尽管这只是一个临时解决方案。

while True:
    x = distances * np.cos(theta)
    y = distances * np.sin(theta)
    plot.plot(x, y, pen=None, symbol='o', clear=True)
    pg.QtGui.QApplication.processEvents()


    #sleep(0.025)

虽然按照我的预期进行,但无法绘制来自串行输入的最新数据。与最近的读取相比,它容易落后几秒钟,可能是因为它无法每1/40秒绘制6400点。我想知道是否有办法只更新1点,而不必每次在pyqtgraph中重新绘制整个散点图。

可能可以基于点进行绘制,但是如果这样,是否有办法跟踪每个单独的点?不应存在​​共享相同角度值且具有不同距离的点,并且实质上应将其覆盖。

我还想知道是否还有其他图形动画库可能是值得考虑的解决方案。

这就是它的外观,如果您想知道:https://i.imgur.com/LCVWbJT.png

1 个答案:

答案 0 :(得分:0)

线程允许您始终具有可用于绘制的数据,但是由于每次绘制迭代的paintEvent延迟,绘制速度受到了瓶颈。据我了解,没有办法用setData更新每个绘画事件1点,而不必为每次迭代重新绘制整个数据集。因此,如果您有6400,则即使要用1个额外的点来更新公正数据,也必须重新绘制所有点。

可能的解决方法包括对数据进行下采样或每X个数据点仅绘制一次。本质上,您可以在屏幕上绘制数据的速度受到限制,但是您可以更改数据集以显示最相关的信息,而无需刷新屏幕。