**
基于PyQtGraph和GraphicsLayoutWidget动态绘图并实现窗口模式,且保留全部绘图信息
** **
前言
基于PySide2、PyQtGraph和GraphicsLayoutWidget动态绘图并实现窗口模式,并保留全部绘图信息:绘制好的图像既可以显示全部信息,也可以显示最新的50个点信息;因为数据量的增加,折线会因为窗口大小的固定缩成一团,如果有窗口模式这一功能,可以清楚的看到最新绘制的点,保证线与线、点与点之间的距离处于一个合理的范围。
正文
实现该需求的重点是:设置PlotItem图形对象显示的X轴区域范围
1、实现动态绘制数据曲线
如何通过定时器进行绘图可以参考【Python_PyQtGraph 学习笔记】基于PySide2和GraphicsLayoutWidget实现动态绘制数据曲线
2、创建一个QCheckBox()对象,可以选择是否显示窗口模式
self.ui.ckbWindowMode = QCheckBox()
self.ui.ckbWindowMode.setText("窗口模式")
3、窗口模式功能的实现
直接看完整代码:
def __f_update_plot_data(self):
"""
function: 更新plot数据函数
in: None
out: None
return: None
others: Update Plot Data Function
"""
now_time = datetime.datetime.now()
new_time = now_time.strftime('%H:%M:%S')
self.__m_temCurveLst[self.__m_curvePtr] = np.random.rand()
self.__m_humCurveLst[self.__m_curvePtr] = np.random.randn()
self.__m_curvePtr += 1
if self.__m_curvePtr >= len(self.__m_temCurveLst):
tmp = self.__m_temCurveLst
self.__m_temCurveLst = [0 for i in range(len(self.__m_temCurveLst) + 10)]
self.__m_temCurveLst[:len(tmp)] = tmp
hmp = self.__m_humCurveLst
self.__m_humCurveLst = [0 for i in range(len(self.__m_humCurveLst) + 10)]
self.__m_humCurveLst[:len(hmp)] = hmp
if self.ui.ckbWindowMode.checkState():
self.ui.temCurve.setData(self.__m_temCurveLst[:self.__m_curvePtr])
self.ui.humCurve.setData(self.__m_humCurveLst[:self.__m_curvePtr])
if self.__m_curvePtr > 50:
self.ui.Curve.setXRange(self.__m_curvePtr - 50, self.__m_curvePtr)
else:
self.ui.temCurve.setData(self.__m_temCurveLst[:self.__m_curvePtr])
self.ui.humCurve.setData(self.__m_humCurveLst[:self.__m_curvePtr])
self.ui.Curve.setXRange(0, self.__m_curvePtr)
其中,重点是以下代码段:
if self.ui.ckbWindowMode.checkState():
self.ui.temCurve.setData(self.__m_temCurveLst[:self.__m_curvePtr])
self.ui.humCurve.setData(self.__m_humCurveLst[:self.__m_curvePtr])
if self.__m_curvePtr > 50:
self.ui.Curve.setXRange(self.__m_curvePtr - 50, self.__m_curvePtr)
else:
self.ui.temCurve.setData(self.__m_temCurveLst[:self.__m_curvePtr])
self.ui.humCurve.setData(self.__m_humCurveLst[:self.__m_curvePtr])
self.ui.Curve.setXRange(0, self.__m_curvePtr)
self.ui.ckbWindowMode: 创建的QCheckBox()对象 self.__m_curvePtr: 创建的曲线指针,记录了当前绘制的点数量 self.ui.Curve: 创建的PlotItem图形对象 self.ui.temCurve: PlotItem图形对象添加PlotDataItem曲线对象 self.ui.humCurve: PlotItem图形对象添加PlotDataItem曲线对象 setXRange(): 设置PlotItem图形对象显示的X轴区域
4、实现的效果图:
|