PyQt5使用pyqtgraph绘制波形图

目录
  • 主程序代码
  • UI界面设计
  • 控件提升
  • UI设计文件
  • UI生成文件
  • 运行效果

主程序代码

import sys
import numpy as np
from PyQt5.QtGui import *
from PyQt5.QtCore import *
from PyQt5.QtWidgets import *

import pyqtgraph as pg

from ui_demo02 import Ui_MainWindow

class GraphDemowWindow(QMainWindow, Ui_MainWindow):
    def __init__(self, parent=None):
        super(GraphDemowWindow, self).__init__(parent)
        self.setupUi(self)

        pg.setConfigOptions(antialias=True) # 设置开启抗锯齿

        self.drawGraphicsLayoutWidget()
        self.drawPoltWidget()

    # 在QWidget控件提升为pyqtgraph.GraphicsLayoutWidget类型的控件上画波形
    def drawGraphicsLayoutWidget(self):
        # pyqtgraph.GraphicsLayoutWidget 支持的方法有:
        # ['nextRow', 'nextCol', 'nextColumn', 'addPlot', 'addViewBox', 'addItem', 'getItem', 'addLayout', 'addLabel', 'removeItem', 'itemIndex', 'clear']
        self.graphicsLayout.clear() # 清除
        plt1 = self.graphicsLayout.addPlot(y=np.random.normal(size=1000), title="温度")
        plt2 = self.graphicsLayout.addPlot(y=np.random.normal(size=500), title="湿度")
        self.graphicsLayout.nextRow() # 图像坐标换行
        plt3 = self.graphicsLayout.addPlot(y=np.random.normal(size=800), title="光照度")
        plt4 = self.graphicsLayout.addPlot(y=np.random.normal(size=800), title="紫外线强度")

    # 在QWidget控件提升为pyqtgraph.PlotWidget类型的控件上画波形
    def drawPoltWidget(self):
        # pyqtgraph.PlotWidget 支持的方法有:
        # ['addItem', 'removeItem', 'autoRange', 'clear', 'setAxisItems', 'setXRange',
        #           'setYRange', 'setRange', 'setAspectLocked', 'setMouseEnabled',
        #           'setXLink', 'setYLink', 'enableAutoRange', 'disableAutoRange',
        #           'setLimits', 'register', 'unregister', 'viewRect']

        # pen = pg.mkPen(255, 0, 0)
        # pen = pg.mkPen("#ff0000")
        # pen = pg.mkPen(color='r', width=3)
        pen = pg.mkPen({'color':'0F0', 'width':1})
        plt1 = self.graphPlot.plot(np.random.normal(size=100), pen=pen,  symbolBrush=(255, 0, 0), symbolPen=(0, 255, 0))

        pen2 = pg.mkPen(color="F00", width=1)
        plt2 = self.graphPlot.plot(np.random.normal(size=50), pen=pen2,  symbolBrush=(0, 255, 0), symbolPen=(255, 0, 0))

        self.graphPlot.setAntialiasing(True)
        self.graphPlot.setBackground("#ffffff")

if __name__ == "__main__":
    app = QApplication(sys.argv)
    win = GraphDemowWindow()
    win.show()
    sys.exit(app.exec_())

UI界面设计

包含了两个QWidget控件也可以是QGraphicsView控件类型。

两个控件分别提升为pyqtgraph.GraphicsLayoutWidget类型和pyqtgraph.PlotWidget

GraphicsLayoutWidget类型通过addPlot方法添加波形数据,每个波形都占有独立的区域。

plt1 = self.graphicsLayout.addPlot(y=np.random.normal(size=1000), title=“温度”)
plt2 = self.graphicsLayout.addPlot(y=np.random.normal(size=500), title=“湿度”)

PlotWidget类型通过plot方法添加波形数据,同一控件内多个plot占用同一窗口区域。

pen2 = pg.mkPen(color=“F00”, width=1)
plt2 = self.graphPlot.plot(np.random.normal(size=50), pen=pen2, symbolBrush=(0, 255, 0), symbolPen=(255, 0, 0))

控件提升

UI设计文件

<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
 <class>MainWindow</class>
 <widget class="QMainWindow" name="MainWindow">
  <property name="geometry">
   <rect>
    <x>0</x>
    <y>0</y>
    <width>1139</width>
    <height>844</height>
   </rect>
  </property>
  <property name="windowTitle">
   <string>MainWindow</string>
  </property>
  <widget class="QWidget" name="centralwidget">
   <widget class="GraphicsLayoutWidget" name="graphicsLayout" native="true">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>20</y>
      <width>1091</width>
      <height>361</height>
     </rect>
    </property>
   </widget>
   <widget class="PlotWidget" name="graphPlot" native="true">
    <property name="geometry">
     <rect>
      <x>30</x>
      <y>390</y>
      <width>1091</width>
      <height>411</height>
     </rect>
    </property>
   </widget>
  </widget>
  <widget class="QMenuBar" name="menubar">
   <property name="geometry">
    <rect>
     <x>0</x>
     <y>0</y>
     <width>1139</width>
     <height>26</height>
    </rect>
   </property>
  </widget>
  <widget class="QStatusBar" name="statusbar"/>
 </widget>
 <customwidgets>
  <customwidget>
   <class>GraphicsLayoutWidget</class>
   <extends>QWidget</extends>
   <header location="global">pyqtgraph.h</header>
   <container>1</container>
  </customwidget>
  <customwidget>
   <class>PlotWidget</class>
   <extends>QWidget</extends>
   <header location="global">pyqtgraph.h</header>
   <container>1</container>
  </customwidget>
 </customwidgets>
 <resources/>
 <connections/>
</ui>

UI生成文件

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'd:\project\python\pyqtgraph\PygraphDemo2\demo02.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1139, 844)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.graphicsLayout = GraphicsLayoutWidget(self.centralwidget)
        self.graphicsLayout.setGeometry(QtCore.QRect(30, 20, 1091, 361))
        self.graphicsLayout.setObjectName("graphicsLayout")
        self.graphPlot = PlotWidget(self.centralwidget)
        self.graphPlot.setGeometry(QtCore.QRect(30, 390, 1091, 411))
        self.graphPlot.setObjectName("graphPlot")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1139, 26))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
from pyqtgraph import GraphicsLayoutWidget, PlotWidget

运行效果

到此这篇关于PyQt5使用pyqtgraph绘制波形图的文章就介绍到这了,更多相关PyQt5 pyqtgraph绘制波形图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Python绘图库之pyqtgraph的用法详解

    plot 设置plot的pen属性的几种方法,通过画笔可以设置绘制图像的颜色.线宽等参数: pen=(255,0,0) pen=pg.mkPen(color=‘b’, width=5) pen=pg.mkPen({‘color’:‘FF0’, ‘width’: 2}) import sys import os from PyQt5.QtGui import * from PyQt5.QtCore import * from PyQt5.QtWidgets import * import pyqt

  • Qt中PaintEvent绘制实时波形图的实现示例

    目录 绘制思路 1:接收硬件传入的数据 2:定时器动态刷新页面 3:真实数据处理 第一步:每进行一次数据更新,都需要剔除超时显示数据. 第二步:筛查有效数据,并记录 4:图形绘制 上一篇文章讲述了如何使用控件进行波形图绘制,虽然很方便,但是也有一些无法避免的问题,比如说:动态绘制图形时,想要流畅的进行波动,就必须按照特定的时间实时更换数据. 接来下,我们采用在paintEvent中绘制的方式进行实时波形图绘制,首先,我们先展示下显示效果吧! 数据来源依旧是硬件传入的实时数据,如下: [0, 3,

  • python中pyqtgraph知识点总结

    PyQtGraph是纯Python的,只是它底层调用的是PyQt,也就是Qt的Python封装,底层用C/C++语言开发的库,它是在PyQt的基础上开发的可视化控件,相较于老牌的绘制库,PyQtGraph在绘图速度上特别突出,保证绘图的美观性以及强大功能前提下,能够极高的效率去绘制图形,下面一起来详细了解下使用技巧吧. pyqtgraph库安装: pip install --user pyqtgraph 更快安装方式: pip3.8 install -i https://mirrors.aliy

  • Qt利用QChart实现实时波形图的绘制

    目录 前言 1.QChart配置以及使用 1.1QChart环境配置 1.2控件使用 1.3代码配置 2.QChat设置动态折线图 2.1基础数据设置 2.2定时器控制数据变动 3.实际硬件数据采集图形绘制 4.总结 前言 前两天需要做一个绘图功能.我们的需求是这样子的:硬件实时发送数据,绘制数据波形图,要求波形图根据数据实时变化. 展示效果如下: 如果有和我一样的功能,大家可以继续往下看,没准会对你有一定的帮助哟~ 看上面的展示图会发现,怎么这么丑!确实,根据硬件实时传入的数据以及时间不同,产

  • PyQt5利用QPainter绘制各种图形的实例

    这个例子我做了好几天: 1)官网C++的源码,改写成PyQt5版本的代码,好多细节不会转化 2)网上的PyQt的例子根本运行不了 填了无数个坑,结合二者,终于能完成了一个关于绘图的东西.这个过程也掌握了很多新的知识点 [知识点] 1.关于多个点的使用 poitns = [QPoint(10, 80), QPoint(20, 10), QPoint(80, 30), QPoint(90, 70)] 请看: # 定义多个点 points = [QPoint(10, 80), QPoint(20, 1

  • java读取wav文件(波形文件)并绘制波形图的方法

    本文实例讲述了java读取wav文件(波形文件)并绘制波形图的方法.分享给大家供大家参考.具体如下: 因为最近有不少网友询问我波形文件读写方面的问题,出于让大家更方便以及让代码能够得到更好的改进,我将这部分(波形文件的读写)代码开源在GitHub上面. 地址为https://github.com/sintrb/WaveAccess/,最新的代码.例子.文档都在那上面,我会在我时间精力允许的前提下对该项目进行维护,同时也希望对这方面有兴趣的网友能够加入到该开源项目上. 以下内容基本都过期了,你可以

  • PyQt5的PyQtGraph实践系列3之实时数据更新绘制图形

    在之前介绍PyQtGraph的文章中,我们都是一次性的获取数据并将其绘制为图形.然而在很多场景中,我们都需要对实时的数据进行图形化展示,比如:股票的实时行情.仪器设备的实时状态等,这时候就需要对数据进行实时的更新和绘制. 今天我们就来介绍一下在PyQtGraph中根据实时数据更新绘制图形. 今天的例子我们通过编写一个电脑CPU实时使用率助手来讲解. 一.通过Python获取实时的CPU信息 在Windows操作系统的电脑上,我们通过"任务管理器"可以很方便地查看到自己电脑CPU实时的使

  • 使用PyQtGraph绘制精美的股票行情K线图的示例代码

    pyqtgraph是Python平台上一种功能强大的2D/3D绘图库,相对于matplotlib库,由于其在内部实现方式上,使用了高速计算的numpy信号处理库以及Qt的GraphicsView框架,因此它在大数据量的处理及快速显示方面有着天然的优势,非常适合于需要快速绘图更新.视频或实时交互性的操作场合,在数学.科学和工程领域都有着广泛的应用. K线图介绍 对于股票交易者来讲,K线图是弄清股票一段时间走势的一种最基本的图形工具,K线分为阳线和阴线,阳线和阴线都包含了开盘价.收盘价.最高价和最低

  • Python3.x+pyqtgraph实现数据可视化教程

    1.pyqtgraph库数据可视化效果还不错,特别是窗体程序中图像交互性较好:安装也很方便,用 pip 安装. 2.在Python中新建一个 .py 文件,然后写入如下代码并执行可以得到官方提供的很多案例(含代码),出现如下界面图像: import pyqtgraph.examples pyqtgraph.examples.run() 图1 图2 图3 4.程序默认是黑色背景,这个是可以修改的.比如,在程序的开头部分写入如下代码就可以修改背景: pg.setConfigOption('backg

  • PyQt5打开文件对话框QFileDialog实例代码

    本文研究的主要是PyQt5打开文件对话框QFileDialog的代码示例,具体如下. 单个文件打开 QFileDialog.getOpenFileName() 多个文件打开 QFileDialog.getOpenFileNames() 文件夹选取 QFileDialog.getExistingDirectory() 文件保存 QFileDialog.getSaveFileName() 实例代码: from PyQt5 import QtWidgets from PyQt5.QtWidgets i

  • pyqt5简介及安装方法介绍

    本文研究的主要是pyqt5简介及安装方法介绍的有关内容,具体如下. pyqt5介绍 pyqt5是一套Python绑定Digia QT5应用的框架.它可用于Python 2和3.本教程使用Python 3.Qt库是最强大的GUI库之一.pyqt5的官方网站 http://www.riverbankcomputing.co.uk/news pyqt5做为Python的一个模块,它有620多个类和6000个函数和方法.这是一个跨平台的工具包,它可以运行在所有主要的操作系统,包括UNIX,Windows

  • pyqt5自定义信号实例解析

    本文研究的主要是pyqt5自定义信号实例解析的相关内容,具体介绍如下. PyQt5已经自动定义了很多QT内建的信号.但是在实际的使用中为了灵活使用信号与槽机制,我们可以根据需要自定义signal.可以使用pyqtSignal()方法定义新的信号,新的信号作为类的属性. 自定义signal说明: pyqtSignal()方法原型(PyQt官网的定义): PyQt5.QtCore.pyqtSignal(types[, name[, revision=0[, arguments=[]]]]) Crea

  • Android提高之蓝牙传感应用实例

    前面文章介绍了Android利用麦克风采集并显示模拟信号的实现方法,这种采集手段适用于无IO控制.单纯读取信号的情况.如果传感器本身需要包含控制电路(例如采集血氧信号需要红外和红外线交替发射),那么传感器本身就需要带一片主控IC,片内采集并输出数字信号了.Android手机如何在不改硬件电路的前提下与这类数字传感器交互呢?可选的通信方式就有USB和蓝牙,两种方式各有好处:USB方式可以给传感器供电,蓝牙方式要自备电源:USB接口标准不一,蓝牙普遍支持SPP协议.本文就选择蓝牙方式做介绍,介绍An

随机推荐