目录
1.GraphicsLayoutWidget()介绍
2.例程1--显示多个图形
3.例程2--同一图形显示多条曲线
4.例程3--显示网格
5.例程4--坐标轴刻度
函数原型:classpyqtgraph.GraphicsLayoutWidget(parent=None, show=False, size=None, title=None, **kargs)由一个GraphicsView以单个GraphicsLayout为中心项目的便利类。这个小部件是生成多面板图形的简单起点。
参数介绍:
源代码:
class GraphicsLayoutWidget(GraphicsView):
"""
Convenience class consisting of a :class:`GraphicsView
` with a single :class:`GraphicsLayout
` as its central item.
This widget is an easy starting point for generating multi-panel figures.
Example::
w = pg.GraphicsLayoutWidget()
p1 = w.addPlot(row=0, col=0)
p2 = w.addPlot(row=0, col=1)
v = w.addViewBox(row=1, col=0, colspan=2)
========= =================================================================
parent (QWidget or None) The parent widget.
show (bool) If True, then immediately show the widget after it is
created. If the widget has no parent, then it will be shown
inside a new window.
size (width, height) tuple. Optionally resize the widget. Note: if
this widget is placed inside a layout, then this argument has no
effect.
title (str or None) If specified, then set the window title for this
widget.
kargs All extra arguments are passed to
:meth:`GraphicsLayout.__init__
`
========= =================================================================
This class wraps several methods from its internal GraphicsLayout:
:func:`nextRow `
:func:`nextColumn `
:func:`addPlot `
:func:`addViewBox `
:func:`addItem `
:func:`getItem `
:func:`addLabel `
:func:`addLayout `
:func:`removeItem `
:func:`itemIndex `
:func:`clear `
"""
[docs] def __init__(self, parent=None, show=False, size=None, title=None, **kargs):
mkQApp()
GraphicsView.__init__(self, parent)
self.ci = GraphicsLayout(**kargs)
for n in ['nextRow', 'nextCol', 'nextColumn', 'addPlot', 'addViewBox', 'addItem', 'getItem', 'addLayout', 'addLabel', 'removeItem', 'itemIndex', 'clear']:
setattr(self, n, getattr(self.ci, n))
self.setCentralItem(self.ci)
if size is not None:
self.resize(*size)
if title is not None:
self.setWindowTitle(title)
if show is True:
self.show()
这个类从它的内部 GraphicsLayout 包装了几个方法: nextRow nextColumn addPlot addViewBox addItem getItem addLabel addLayout removeItem itemIndex
clear
例程展示了addPlot的用法,每次add Plot都会显示一个波形图窗口。允许通过调用nextColumn和nextRow调整行列位置。
# -*- coding: utf-8 -*-
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
# 创建一个图形布局小部件
win = pg.GraphicsLayoutWidget(show=True, size=(600,600), title="布局小部件标题")
# 上面已经初始化过size,还可以通过以下方式修改size
# win.resize(1000,600)
# 设置窗口标题
# win.setWindowTitle('布局小部件标题')
# 添加Plot显示窗体
p1 = win.addPlot(title="Plot标题1", y=np.random.normal(size=100))
# 在下一列显示窗体
win.nextColumn()
p2 = win.addPlot(title="Plot标题2", y=np.random.normal(size=100))
# 在下一行显示窗体
win.nextRow()
p3 = win.addPlot(title="Plot标题3", y=np.random.normal(size=100))
p4 = win.addPlot(title="Plot标题4", y=np.random.normal(size=100))
# 显示label
win.addLabel(text = "我是一个Label")
if __name__ == '__main__':
pg.exec()
运行结果:
同一图显示多条曲线的方法。
# -*- coding: utf-8 -*-
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
# 创建一个图形布局小部件
win = pg.GraphicsLayoutWidget(show=True, size=(600,600), title="布局小部件标题")
# 添加Plot显示窗体
p = win.addPlot(title="Plot标题")
# 显示第一波形
p.plot(np.random.normal(size=100), pen=(255,0,0), name="红色")
# 显示第二波形
p.plot(np.random.normal(size=110)+5, pen=(0,255,0), name="绿色")
# 显示第三波形
p.plot(np.random.normal(size=120)+10, pen=(0,0,255), name="蓝色")
if __name__ == '__main__':
pg.exec()
运行结果:
通过p.showGrid(x=True, y=True)来控制横纵grid的显示。
# -*- coding: utf-8 -*-
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
# 创建一个图形布局小部件
win = pg.GraphicsLayoutWidget(show=True, size=(600,600), title="布局小部件标题")
# 添加Plot显示窗体
p = win.addPlot(title="Plot标题")
# 显示第一波形
p.plot(np.random.normal(size=100), pen=(255,0,0), name="Red curve")
# 显示网格
p.showGrid(x=True, y=True)
if __name__ == '__main__':
pg.exec()
运行结果:
本例程主要介绍如何设置显示XY轴刻度,以及自动调整刻度单位。
# -*- coding: utf-8 -*-
from pyqtgraph.Qt import QtGui, QtCore
import numpy as np
import pyqtgraph as pg
# 创建一个图形布局小部件
win = pg.GraphicsLayoutWidget(show=True, size=(600,600), title="布局小部件标题")
# 添加Plot显示窗体
p = win.addPlot(title="Plot标题")
x = np.random.normal(size=1000) * 1e-5
y = x*1000 + 0.005 * np.random.normal(size=1000)
y -= y.min()-1.0
mask = x > 1e-15
x = x[mask]
y = y[mask]
# 显示第一波形
p.plot(x, y, pen=None, symbol='t', symbolPen=None, symbolSize=10, symbolBrush=(100, 100, 255, 50))
# 显示网格
p.showGrid(x=True, y=True)
# Y轴Label显示坐标轴刻度
p.setLabel('left', "Y Axis", units='A')
# X轴Label显示坐标轴刻度
p.setLabel('bottom', "X Axis", units='s')
# 如果log为 True,则以对数刻度显示刻度并相应地调整值。(x轴的单位可以自动调整ms us 。。。)
p.setLogMode(x=True, y=False)
if __name__ == '__main__':
pg.exec()
运行结果: