Python 如何在pyqtgraph中加速实时绘图

Python 如何在pyqtgraph中加速实时绘图,python,performance,pyqtgraph,graphing,Python,Performance,Pyqtgraph,Graphing,简而言之,我试图找到一种更快的方法来绘制通过串行输入的实时数据。数据看起来像一个坐标(x,y),每秒大约有40个。流将数据存储在一个数组中,使用x作为索引,设置y作为其值。这部分正在穿线。虽然流可以立即读入数据,但pyqtgraph库无法跟上这种速度 下面是我绘制数据的代码部分。距离和θ变量是具有6400个索引的数组。它们已转换为极坐标值,并在每次迭代时绘制。我在那里添加了一个延迟,只是为了帮助保持实时性,尽管这只是一个临时解决方案 为True时: x=距离*np.cos(θ) y=距离*np.

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

下面是我绘制数据的代码部分。距离和θ变量是具有6400个索引的数组。它们已转换为极坐标值,并在每次迭代时绘制。我在那里添加了一个延迟,只是为了帮助保持实时性,尽管这只是一个临时解决方案

为True时:
x=距离*np.cos(θ)
y=距离*np.sin(θ)
plot.plot(x,y,pen=None,symbol='o',clear=True)
pg.QtGui.QApplication.processEvents()
#睡眠(0.025)
虽然它按照我期望的方式运行,但它无法从串行输入中绘制最新的数据。它很容易比最近的读数落后几秒钟,可能是因为它不能每1/40秒绘制6400个点。我想知道是否有办法只更新1个点,而不必每次在pyqtgraph中重新绘制整个散射

可以基于点进行绘图,但如果可以,是否有方法跟踪每个点?不应存在共享相同角度值且具有不同距离的点,并且基本上应覆盖该点

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

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


线程化允许您始终拥有可用于打印的数据,但由于每次打印迭代的
paintEvent
延迟,打印速度受到限制。根据我的理解,没有办法使用
setData
来更新每个绘制事件的1个点,而不必为每次迭代重新生成整个数据集。因此,如果您有6400个点,则必须重新绘制所有点,即使您正在使用1个附加点更新刚刚的数据

潜在的解决方法包括对数据进行下采样,或每X个数据点只打印一次。基本上,您可以将数据打印到屏幕上的速度设置为上限,但您可以更改数据集以显示最相关的信息,而屏幕刷新次数较少