从官方实例中找到了这样一个例子,始终让曲线靠左,往右无限延伸
随后后,我将它实用到了我的代码中
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
最终实现了我的要求,可往右拖拉,实现观察历史曲线
其中有一点困住了我很长时间
就是我原本画图部分是这样写的
self.plot_plt.plot().setData(self.data_zl, pen=self.pen)
self.plot_plt.plot().setPos(-self.ptr3, 0)
这样就导致了我在每次刷新曲线图的时候,都重新创建了一张画布,倒是曲线不会正常运作,就必须提前预置好画图,再去刷新曲线即可