pyqtGraph 实现多个y轴 对应不同的折线

创建视图框pg.ViewBox()
创建视图 pg.GraphicsView()
创建图形布局pg.GraphicsLayout()
来实现。
代码有详细注释:

import pyqtgraph as pg

app = pg.QtGui.QApplication([])
# 定义轴
a2 = pg.AxisItem("right")
a3 = pg.AxisItem("right")
a4 = pg.AxisItem("right")
a5 = pg.AxisItem("left")
a6 = pg.AxisItem("left")

# 视图框,用于存放折线
v2 = pg.ViewBox()
v3 = pg.ViewBox()
v4 = pg.ViewBox()
v5 = pg.ViewBox()
v6 = pg.ViewBox()

# 创建视图
pw = pg.GraphicsView()
pw.setWindowTitle('pyqtgraph 标题')
pw.show()

# 创建图形布局
l = pg.GraphicsLayout()
# 设置视图中心小部件 为该布局
pw.setCentralWidget(l)

# 向布局添加轴
# 注意这里col参数的位置
l.addItem(a2, row = 2, col = 5,  rowspan=1, colspan=1)
l.addItem(a3, row = 2, col = 4,  rowspan=1, colspan=1)
l.addItem(a4, row = 2, col = 6,  rowspan=1, colspan=1)
l.addItem(a5, row = 2, col = 2,  rowspan=1, colspan=1)
l.addItem(a6, row = 2, col = 1,  rowspan=1, colspan=1)

# 至少有一个绘图项使用它自己的视图框和左轴。
pI = pg.PlotItem()  # 定义一个绘图项
v1 = pI.vb # 对绘图项的视图框的引用
l.addItem(pI, row = 2, col = 3,  rowspan=1, colspan=1) # 添加绘图框到图形布局

# 向绘图框添加视图框
l.scene().addItem(v2)
l.scene().addItem(v3)
l.scene().addItem(v4)
l.scene().addItem(v5)
l.scene().addItem(v6)

# 用轴连接 存放折线的视图框
a2.linkToView(v2)
a3.linkToView(v3)
a4.linkToView(v4)
a5.linkToView(v5)
a6.linkToView(v6)

# 链接视图框,我也不知道干嘛这样写,但是写上就会在--绘图项的视图框上,整体缩放所有的折线
v2.setXLink(v1)
v3.setXLink(v2)
v4.setXLink(v3)
v5.setXLink(v4)
v6.setXLink(v5)

# 轴标签
pI.getAxis("left").setLabel('axis 1 in ViewBox of PlotItem', color='#FFFFFF')
a2.setLabel('axis 2 in Viewbox 2', color='#2E2EFE')
a3.setLabel('axis 3 in Viewbox 3', color='#2EFEF7')
a4.setLabel('axis 4 in Viewbox 4', color='#2EFE2E')
a5.setLabel('axis 5 in Viewbox 5', color='#FFFF00')
a6.setLabel('axis 6 in Viewbox 6', color='#FE2E64')

# slot: 插槽:调整大小时更新视图
def updateViews():
    # setGeometry设置几何图形
    # sceneBoundingRect场景边界矩形
    v2.setGeometry(v1.sceneBoundingRect())
    v3.setGeometry(v1.sceneBoundingRect())
    v4.setGeometry(v1.sceneBoundingRect())
    v5.setGeometry(v1.sceneBoundingRect())
    v6.setGeometry(v1.sceneBoundingRect())

# 折线点值 (轴刻度范围自动按最大最小值生成)
x = [1,2,3,4,5,6]
y1 = [0,4,6,8,10,4]
y2 = [0,5,7,9,11,3]
y3 = [0,1,2,3,4,12]
y4 = [0,8,0.3,0.4,2,5]
y5 = [0,1,6,4,2,1]
y6 = [0,0.2,0.3,0.4,0.5,0.6]

# 给绘图项的视图框添加折线xy点的值,折线颜色
v1.addItem(pg.PlotCurveItem(x, y1, pen='#FFFFFF'))
v2.addItem(pg.PlotCurveItem(x, y2, pen='#2E2EFE'))
v3.addItem(pg.PlotCurveItem(x, y3, pen='#2EFEF7'))
v4.addItem(pg.PlotCurveItem(x, y4, pen='#2EFE2E'))
v5.addItem(pg.PlotCurveItem(x, y5, pen='#FFFF00'))
v6.addItem(pg.PlotCurveItem(x, y6, pen='#FE2E64'))
#
#  调整大小时更新
v1.sigResized.connect(updateViews)

# 开始时自动调整一次以适应视图
# enableAutoRange 启用自动范围
v2.enableAutoRange(axis= pg.ViewBox.XYAxes, enable=True)
v3.enableAutoRange(axis= pg.ViewBox.XYAxes, enable=True)
v4.enableAutoRange(axis= pg.ViewBox.XYAxes, enable=True)
v5.enableAutoRange(axis= pg.ViewBox.XYAxes, enable=True)
v6.enableAutoRange(axis= pg.ViewBox.XYAxes, enable=True)

updateViews()
app.exec_()

实现效果如下:可以自由缩放轴折线

pyqtGraph 实现多个y轴 对应不同的折线_第1张图片

你可能感兴趣的:(个人笔记)