pyqtgraph绘图的方法

qt的窗体构成:

QMainWindow Class | Qt Widgets 5.15.12https://doc.qt.io/qt-5.15/qmainwindow.html

图2:QDockWidget Class | Qt Widgets 5.15.12

Qt GUI几乎都是由几个基本组件组成:

  • 一个窗口。 这通常由QMainWindow提供,但请注意,如果窗口小部件没有父窗口,只需调用widget.show(),就可以在窗口中显示所有QWidgets。
  • 多个QWidget实例,如QPushButton,QLabel,QComboBox等
  • QLayout实例(可选,但强烈鼓励),它可以自动管理窗口小部件的位置,同时允许GUI以可调整的方式调整大小。

PyQtGraph通过提供自己的QWidget子类插入到你的GUI中来适应这个方案。

from PyQt5 import QtWidgets
import pyqtgraph as pg

app = QtWidgets.QApplication([])     # 创建一个应用

w = QtWidgets.QWidget()              # 创建一个窗口

# 创建一些窗口部件
btn = QtWidgets.QPushButton('press me')
text = QtWidgets.QLineEdit('enter text')
listw = QtWidgets.QListWidget()
plot = pg.PlotWidget()

# 设置窗口布局
layout = QtWidgets.QGridLayout()
w.setLayout(layout)

# 窗口布局添加部件
layout.addWidget(btn, 0, 0)   # button goes in upper-left
layout.addWidget(text, 1, 0)   # text edit goes in middle-left
layout.addWidget(listw, 2, 0)  # list widget goes in bottom-left
layout.addWidget(plot, 0, 1, 3, 1)  # plot goes on right side, spanning 3 rows

w.show()                         # 显示窗口

app.exec_()                      # 开始Qt事件循环

运行如下图所示:

命名约定

事实上pyqtgraph中的每个类都是Qt提供的基类的扩展。 在阅读文档时,请记住Qt的所有类都以字母“Q”开头,而pyqtgraph的类没有。 在阅读任何类的方法时,这样通常有助于查看使用了哪些Qt基类,然后查看Qt文档。

大多数Qt的类都定义了很难区别于常规方法的信号。几乎所有由pyqtgraph定义的信号显示都以'sig'开头,表示这些信号不是在Qt级定义。

在大多数情况下,以'Widget'结尾的类都是QWidget的子类,因此可以用作Qt窗口中的GUI元素。 以'Item'结尾的类是QGraphicsItem的子类,只能在QGraphicsView实例(如GraphicsLayoutWidget或PlotWidget)中显示。

有关Qt GraphicsView更多信息:https://blog.csdn.net/kenfan1647/article/details/117383803

在pyqtgraph中绘图

绘图分为三个步骤:

1.创建一个app

2.创建一个窗体部件(widget)接收绘图项.向窗体部件中添加需要的绘图项(曲线、文字标签、柱状图等)

  • 常用创建绘图窗体方式:
  • 1.win = pg.GraphicsLayoutWidget(show=True)   #最简洁
  • 2.win = pg.GraphicsView()
  • 3.win = pg.PlotWidget(show=True)
  • 4.win = pg.LayoutWidget(show=True)
  • 5.win = pg.GraphicsLayout() 

3.app进入事件循环

使用GraphicsWindow方法绘制图形:

import numpy as np
import pyqtgraph as pg

app = pg.mkQApp()

# win = pg.GraphicsWindow()
win = pg.GraphicsLayoutWidget(show=True)
win.setWindowTitle("多条曲线的显示")
win.resize(800,600)

x = np.linspace(-5*np.pi,5*np.pi,500)
y1 = 0.5*np.sin(x)
y2 = 2*np.cos(x)
y3 = np.sinc(x)
y4 = np.sinc(x)
# 创建绘图区域plot1,plot2,plot3
plot1 = win.addPlot(left="Amplitude",bottom="x",title="y1,y4")
win.nextRow()#切换下一行插入绘图区域
plot2 = win.addPlot(left="Amplitude",bottom="x",title="y2")
win.nextRow()
plot3 = win.addPlot(left="Amplitude",bottom="x",title="y3")
line1 = pg.PlotCurveItem(pen='r')
# line1 = pg.PlotDataItem(pen='r')
line2 = pg.PlotCurveItem(pen='y')
plot1.addItem(line1)
plot1.addItem(line2)

# for p,y,pen in zip([plot1,plot2,plot3],[y1,y2,y3],['r','g','y']):
for p,y,pen in zip([plot2,plot3],[y2,y3],['g','y']):
    p.plot(x,y,pen=pen)
    p.showGrid(x=True,y=True)
    p.setRange(xRange=[-5*np.pi,5*np.pi],yRange=[-2.3,2.3],padding=0)

#plot1.plot(x,y4,pen='y')
line1.setData(x,y1,pen='r')
line2.setData(x,y4,pen='y')

app.exec_()

程序运行效果如下:

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值