You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用PyQtGraph高效绘制上游进程逐个传入的实时滚动数据

无需缓冲实现pyqtgraph高效滚动绘图的方法

以下几种方法可以实现无缓冲状态下的高效滚动绘图,核心是减少不必要的开销、优化更新逻辑:

  • 复用单个曲线对象,避免重复创建
    不要每次收到新样本就创建新的PlotCurveItem,初始化时创建一次曲线,之后仅更新其数据数组,并保持数据长度在固定范围内(实现滚动效果)。这种方式避免了频繁创建/销毁图形元素的性能损耗。
    示例代码:

    # 初始化阶段
    self.plot_widget = pg.PlotWidget()
    self.curve = self.plot_widget.plot()
    self.x_data = []
    self.y_data = []
    self.max_display_points = 1000  # 设定最多显示的点数
    
    # 接收新样本时的更新逻辑
    def update_plot(self, new_x, new_y):
        self.x_data.append(new_x)
        self.y_data.append(new_y)
        # 截断旧数据,保持滚动范围
        if len(self.x_data) > self.max_display_points:
            self.x_data = self.x_data[-self.max_display_points:]
            self.y_data = self.y_data[-self.max_display_points:]
        # 直接更新已有曲线的数据
        self.curve.setData(self.x_data, self.y_data)
    
  • 启用pyqtgraph内置的下采样优化
    利用PlotDataItem的downsample和autoDownsample参数,让pyqtgraph自动对超出屏幕显示能力的数据进行下采样,减少实际绘制的点数,大幅降低渲染压力。
    示例:

    # 初始化曲线时开启下采样
    self.curve = self.plot_widget.plot(downsample=True, autoDownsample=True)
    
  • 将数据接收与绘图更新解耦
    把上游数据的接收逻辑放到独立线程中,通过信号槽机制将数据传递到主线程进行绘图更新。这样主线程不会被数据接收阻塞,保证绘图更新的流畅性。
    示例:

    from PyQt5.QtCore import QThread, pyqtSignal
    
    class DataFetchThread(QThread):
        sample_ready = pyqtSignal(float, float)  # 传递单样本(x,y)
    
        def run(self):
            while self.isRunning():
                # 模拟从上游获取单个样本
                x_val, y_val = get_single_sample()
                self.sample_ready.emit(x_val, y_val)
    
    # 主窗口中绑定信号
    self.fetch_thread = DataFetchThread()
    self.fetch_thread.sample_ready.connect(self.update_plot)
    self.fetch_thread.start()
    
  • 关闭非必要的绘图特性
    关闭抗锯齿、自动缩放、网格等非必需功能,减少绘图时的计算量:

    # 关闭曲线抗锯齿
    self.curve.setAntialias(False)
    # 关闭自动缩放,固定显示范围
    self.plot_widget.enableAutoRange('xy', False)
    # 隐藏不需要的坐标轴或网格
    self.plot_widget.getPlotItem().hideGrid(x=True, y=True)
    

这些方法不需要依赖数据缓冲,通过优化绘图逻辑和利用pyqtgraph的内置特性,就能实现单个样本更新时的高效滚动绘图。

内容的提问来源于stack exchange,提问作者BigBrownBear00

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 21:32:47