PyQtGraph中的绘图类有两种,分别为:PlotWidget 和 GraphicsLayoutWidget,都是 GraphicsView 子类:
1、PlotWidget(GraphicsView) 只能内置一个绘图对象PlotItem;
2、GraphicsLayoutWidget(GraphicsView),这个子类用于生成多面板图形,可以内置多个绘图对象。
此篇文章中只介绍GraphicsLayoutWidget类的基本用法,包括同一图形显示多条曲线,显示网格线,设置背景色等。
import pyqtgraph as pg
self.ui.pw = pg.GraphicsLayoutWidget(show=True) # GraphicsLayoutWidget图形布局部件
#show:如果为True,则在部件创建后立即显示;
#如果部件没有父组件,则会显示在一个新窗口。
self.ui.pw.setBackground('w') # GraphicsLayoutWidget图形布局部件 背景色改为白色
self.ui.pwLabel = pg.LabelItem(justify='right') # 创建坐标的标签
self.ui.pw.addItem(self.ui.pwLabel) # 将坐标添加到GraphicsLayoutWidget图形布局部件中来
self.ui.Curve = self.ui.pw.addPlot(row=1, col=0) # PlotItem图形对象
每次使用addPlot()方法都会显示一个图形窗口,允许通过row和col参数调整行列位置
self.ui.Curve.showGrid(x=True, y=True) # PlotItem图形对象 显示网格线
self.ui.Curve.setDownsampling(mode='peak') # 下采样模式
下采样:缩小图像,或称降采样。
共有三种模式:
mean: 取N个样本的均值。
subsample:通过取N个样本中的第一个样本,这种方法最快,但最不准确。
peak: 遵循原始数据的最小值和最大值绘制一个锯齿波,这种方法可以产生最好的数据可视化表示,但速度较慢。
self.ui.Curve.setLabel("left", "温度", units='℃') # 设置左侧坐标轴刻度
self.ui.Curve.setLabel("bottom", "时间", units='s') # 设置下侧坐标轴刻度
self.ui.Curve.setLogMode(x=False, y=False) # False代表线性坐标轴,True代表对数坐标
如果设置为 True,则以对数刻度显示刻度并相应地调整值。
self.ui.Curve.addLegend(offset=(1, 1)) # 显示曲线属性name 位置放置在左上角
self.__m_temCurveLst = [0] * 10 # 温度曲线数组
self.__m_humCurveLst = [0] * 10 # 湿度曲线数组
self.ui.temCurve = self.ui.Curve.plot(self.__m_temCurveLst, pen=pg.mkPen('black', width=1), name="温度曲线")
self.ui.humCurve = self.ui.Curve.plot(self.__m_humCurveLst, pen=pg.mkPen('green', width=1), name="湿度曲线")
self.temPoint = pg.CurvePoint(self.ui.temCurve) # 创建温度曲线上的点
self.humPoint = pg.CurvePoint(self.ui.humCurve) # 创建湿度曲线上的点
self.temPoint.setPos(0.5) # Point设置位置的float类型范围是0-1
注意:CurvePoint点对象可设置的范围是0-1
self.arrow = pg.ArrowItem(angle=90) # 创建一个箭头
self.arrow.setParentItem(self.ui.temPoint) # 将箭头添加到温度点上
self.minLine = pg.InfiniteLine(angle=0, movable=True, pen=pg.mkPen('blue', width=0.5), name="下限") # 设置下限
self.maxLine = pg.InfiniteLine(angle=0, movable=True, pen=pg.mkPen('red', width=0.5), name="上限") # 设置上限
self.ui.Curve.addItem(self.minLine, ignoreBounds=True) # 在图形中添加下限
self.ui.Curve.addItem(self.maxLine, ignoreBounds=True) # 在图形中添加上限
self.ui.Curve.setMouseEnabled(x=False, y=False) # 禁用轴操作
self.ui.Curve.hideButtons() # 隐藏PlotItem对象 的 自动缩放按钮“A”(左下角)
self.ui.Curve.showButtons() # 显示PlotItem对象 的 自动缩放按钮“A”(左下角)
self.ui.Curve.removeItem(self.ui.temCurve) # 移除温度曲线
self.ui.Curve.clear() # 清空曲线对象
self.ui.Curve.setVisible(False) # 隐藏图形对象
self.ui.Curve.setVisible(True) # 显示图形对象