python 利用pyqtgraph实时采集数据绘图并可随时查看历史曲线

从官方实例中找到了这样一个例子,始终让曲线靠左,往右无限延伸
python 利用pyqtgraph实时采集数据绘图并可随时查看历史曲线_第1张图片
随后后,我将它实用到了我的代码中

pg.setConfigOptions(leftButtonPan=True, antialias=False, foreground=QColor(0, 0, 0))   # 禁止拉动图表,抗锯齿,坐标轴颜色
self.main_layout = QtWidgets.QGridLayout()  # 创建一个网格布局
self.widget.setLayout(self.main_layout)  # 设置主部件的布局为网格
self.plot_widget = QtWidgets.QWidget()  # 实例化一个widget部件作为K线图部件
self.plot_layout = QtWidgets.QGridLayout()  # 实例化一个网格布局层
self.plot_widget.setLayout(self.plot_layout)  # 设置K线图部件的布局层
self.plot_plt = pg.PlotWidget(background='w')  # 实例化一个绘图部件,背景色白色
self.plot_plt.showGrid(x=False, y=True)  # 栅格设置函数
self.plot_layout.addWidget(self.plot_plt)  # 添加绘图部件到K线图部件的网格布局层
# 将上述部件添加到布局层中
self.main_layout.addWidget(self.plot_widget)   # addWidget(添加的部件,添加的起始行,添加的起始列,占用行数,占用列数)

self.plot_plt.setDownsampling(mode='peak')
self.plot_plt.setClipToView(True)
self.plot_plt.setRange(xRange=[-100, 0], yRange=[0, 1000])
self.plot_plt.setLimits(xMax=1,yMin=-50)
self.curve = self.plot_plt.plot()   # 创建画布
self.curve2 = self.plot_plt.plot()
self.ptr3 = 0
self.pen = pg.mkPen({'color': (0, 0, 255), 'width': 2})   # 定义画笔
self.pen2 = pg.mkPen({'color': (255, 0, 255), 'width': 2})

# 刷新曲线图
def get_zl(self):
	self.ptr3 += 1
	if self.zl != 99999:   # self.zl是我实时采集的数据
          self.data_zl.append(self.zl)    # 在列表最后添加zl
          if self.checkBox.isChecked():
	          self.curve.setData(self.data_zl, pen=self.pen)
	          self.curve.setPos(-self.ptr3, 0)
          else:
              self.curve.clear()
	if self.zl2 != 99999:
		self.data_zl2.append(self.zl2)  # 在列表最后添加zl
        if self.checkBox_2.isChecked():
        	self.curve2.setData(self.data_zl2, pen=self.pen2)
			self.curve2.setPos(-self.ptr3, 0)
        else:
            self.curve2.clear()

# 调用定时器
self.timer1 = QtCore.QTimer(self)
self.timer1.timeout.connect(self.get_zl)
self.timer1.start(100)   # 计时间隔为ms

最终实现了我的要求,可往右拖拉,实现观察历史曲线
python 利用pyqtgraph实时采集数据绘图并可随时查看历史曲线_第2张图片
其中有一点困住了我很长时间
就是我原本画图部分是这样写的

self.plot_plt.plot().setData(self.data_zl, pen=self.pen)
self.plot_plt.plot().setPos(-self.ptr3, 0)

这样就导致了我在每次刷新曲线图的时候,都重新创建了一张画布,倒是曲线不会正常运作,就必须提前预置好画图,再去刷新曲线即可

你可能感兴趣的:(python,pyqt5,python,数据可视化)