相关文章推荐
阳刚的硬盘  ·  System.Data.SqlClient. ...·  1 年前    · 
稳重的豆腐  ·  asset studio fbx-掘金·  1 年前    · 
微醺的豌豆  ·  使用 PowerShell 管理 ...·  2 年前    · 

创建视图框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,而且官方文档实在简陋,导致一时间没有思路,各种百度,当然其实mdf解析包asmmdf的gui已经实现了这个功能,再不济还可以参考下它的实现,但是本着学知识的态度,我还是没有一开始就看它的源码,还是想自己百度解决,虽然这样也是,但是一个一个知识点百度,一个一个问题解决,这样可能会学到更多东西,于是就开始了学习之旅。这个技术点我搜到了几篇文章,但最有帮助的要数云淡风轻博主的博客了,链接。当然到现在还没结束,下一步是实现移动线,根据线的位置,显示各个图的值,今天放假,下周见。 pyqtgraph是一个用于创建图形的python库。当在pyqtgraph中画多个Y轴时,默认的Y轴(Y1)与新增的Y轴(Y2)的坐标刻度可能不能对齐。这是因为pyqtgraph在默认情况下是根据数据的范围计算坐标刻度的,而新增的Y轴可能数据范围不一样,导致坐标刻度不对齐。 要解决这个问题,可以使用pyqtgraph的setYRange()方法手动设置坐标轴的范围,以便使默认的Y轴(Y1)和新增... from PyQt5 import QtCore,QtWidgets from PyQt5.QtCore import Qt from typing import Any,Dict import pyqtgraph as pg pg.setConfigOption('background', 'w') pg.setConfigOption('foreground.. 通常在pyqtgraph中处理自定义轴字符串时,人们将子类化为AxisItem并使用他们想要显示的字符串覆盖tickStrings.Pyqtgraphs axisitem还有一个内置的setTicks,它允许你指定将要显示的刻度,这可以针对这样的简单问题而不是子类化AxisItem来完成.在x轴上使用自定义字符串绘图可以像这样完成.>创建一个带有x值的dict以及要在轴上显示的字符串.xdi... 引言pyqtgraphPython平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于内部实现方式上,使用了高速计算的numpy信号处理库以及QtGraphicsView框架,因此,它在大数据量的数字处理和快速显示方面有着巨大的优势,它适合于需要快速绘图更新、视频或实时交互性的操作场合。另外,它不仅为各种数据提供了快速可交互式的图形显示,同时也提供了用于快速开发应用程序的各... 我正在使用Python和PyQt4开发一个应用程序,该应用程序针对深度绘制不同的参数.由于具有良好的动画速度功能,因此绘图包是PyQtGraph.由于我是针对深度绘制的,因此我想反转Y轴.我发现我可以modify the ViewBox class in the PyQtGraph’s documentation.因此,我从Python Site Packages文件夹修改了该类的代码.但是我希望... pyqtgraph 使用了 qt 的图形视图框架(Graphics View Framework), 如 QtGui.QGraphicsView 和 QtGui.QGraphicsObject。基于GraphicsObject的item交互功能有限,基于 QGraphicsView 的item 交互功能丰富。了解pyqtgraph的类关系后,可以按需改造,自定义画图... 1. 类似Echart dataZoom用法 问题:LayOut可以设置占用的列数 不能占用行数 我想将下面的图占用一个行 上面的图占用四个行 形成4:1的效果,但是多次测试均无法搞定,希望能蹲到大佬 2.多Y轴封装 3.自定义X轴 问题: 自定义X轴后 X轴的缩放一直没有调试出来 4.一个页面多数个chart展示 5. 移动游标Item