繁体   English   中英

在Python和pyqtgraph的不同图形上绘制多个数据流的最佳实践

[英]Best practice for plotting multiple streams of data on different graphs in Python & pyqtgraph

我正在PyQt中编写一个应用程序,该应用程序接收8个传感器波形,并且在一个窗口中有8个QGraphicViews,可传输8个数据。 当我仅使用一个传感器时,一切正常。 但是,如果我全部使用8个实时流,则绘制速度会变慢并崩溃。

在同时绘制大量实时流以减少性能时间时,什么是最佳实践?应该注意什么? 多线程有帮助吗? 以较低的帧速率绘制?

由于任务是受CPU约束的,并且您仍在一个内核上运行(默认情况下,对于Python),多线程几乎没有用。 此外,PyQtGraph不能有任何密谋在多个线程中完成的:一切都必须在主线程中进行(见笔者的一个类似主题的响应这里 )。 因此,尽管多线程或多处理可以帮助您获取或处理数据,但它不能解决主要瓶颈:以太高的速率在太小的空间中绘制太多的数据。

解决方案? 下采样。 方便地,PyQtGraph具有此内置函数。 这是一个示例(从PyQtGraph示例套件修改而来)。

import numpy as np
import pyqtgraph as pg
from PySide import QtGui, QtCore

win = pg.GraphicsWindow(title="Basic plotting examples")
win.resize(1000,600)
win.setWindowTitle('pyqtgraph example: Plotting')

# Enable antialiasing for prettier plots
pg.setConfigOptions(antialias=True)

p1 = win.addPlot(title="Downsampled")
# normally would plot 1000, but we downsample by 10 fold
p1.plot(np.random.normal(size=1000), pen=(255,0,0), name="Red curve", downsample=10)

p2 = win.addPlot(title="Normal")
p2.plot(np.random.normal(size=1000), pen=(0,0,255), name="Blue curve",)


## Start Qt event loop unless running in interactive mode or using pyside.
if __name__ == '__main__':
    QtGui.QApplication.instance().exec_()

结果是,这里的左侧少了10倍,从而可以提供更高的性能。

左,下采样,右,正常

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM