【问题标题】:How to speed up real time plotting in pyqtgraph如何加快pyqtgraph中的实时绘图
【发布时间】:2019-10-02 20:23:49
【问题描述】:

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

这是我绘制数据的代码部分。距离和 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 中重新绘制整个散点图。

也许可以根据点进行绘图,但如果是这样,有没有办法跟踪每个单独的点?不应该有任何点共享相同的角度值并且具有不同的距离,并且应该基本上覆盖它。

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

这就是它的样子,如果你想知道的话:

【问题讨论】:

    标签: python performance pyqtgraph graphing


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2019-02-02
      • 2018-03-05
      • 2019-02-13
      • 2017-12-16
      • 2013-07-30
      • 2018-03-11
      • 2015-06-21
      • 2021-03-31
      • 2017-03-27
      相关资源
      最近更新 更多