PyQt5结合matplotlib绘图的实现方法

  • 时间:
  • 7497人关注

这篇文章主要介绍了PyQt5结合matplotlib绘图的实现示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧,另外这篇文章主要知识点是关于PyQt5、matplotlib、matplotlib绘图、PyQt5的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子资料:

教程详情电子资料
  • 教程类别:PyQt5
  • 编辑整理:浦翰学
  • 教程字数:2998字节
  • 阅读时间:大概11分钟
  • 下载本教程(DOC版)
  • Matplotlib中文手册
  • Python数据可视化之matplotlib精进
  • Python数据可视化之matplotlib实践
  • PyQt5快速开发与实战
  • 参考网上的例子,实现了简单的matplotlib pyqt5绘图 

    相关知识点:
     (1)pyqt5中添加控件要在布局中添加
     (2)布局可以使用replaceWidget替换控件
     (3)信号与槽机制

    timer = QtCore.QTimer(self)
    timer.timeout.connect(self.update_figure)
    
    self.btnPlot.clicked.connect(self.plotButton_callback)

    实现的效果

    import sys
    from PyQt5 import QtCore, QtGui, uic
    from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QMessageBox, QVBoxLayout, QSizePolicy, QWidget
    
    from PyQt5.QtGui import QIcon
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
    from matplotlib.figure import Figure
    import matplotlib.pyplot as plt
    import numpy as np
    
    qtCreatorFile = "matplotlib_ui.ui"
    # 使用uic加载
    Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
    
    class MyMplCanvas(FigureCanvas):
      """这是一个窗口部件,即QWidget(当然也是FigureCanvasAgg)"""
      def __init__(self, parent=None, width=5, height=4, dpi=100):
        fig = Figure(figsize=(width, height), dpi=dpi)
        self.axes = fig.add_subplot(111)
        # 每次plot()调用的时候,我们希望原来的坐标轴被清除(所以False)
        self.axes.hold(False)
        self.axes.grid('on')
    
        self.compute_initial_figure()
    
        #
        FigureCanvas.__init__(self, fig)
        self.setParent(parent)
    
        FigureCanvas.setSizePolicy(self,
                      QSizePolicy.Expanding,
                      QSizePolicy.Expanding)
        FigureCanvas.updateGeometry(self)
    
      def compute_initial_figure(self):
        pass
    
    class MyStaticMplCanvas(MyMplCanvas):
      """静态画布:一条正弦线"""
      def compute_initial_figure(self):
        t = np.arange(0.0, 3.0, 0.01)
        s = np.sin(2 * np.pi * t)
        self.axes.grid('on')
        self.axes.plot(t, s)
    
    
    class MyDynamicMplCanvas(MyMplCanvas):
      """动态画布:每秒自动更新,更换一条折线。"""
      def __init__(self, *args, **kwargs):
        MyMplCanvas.__init__(self, *args, **kwargs)
        timer = QtCore.QTimer(self)
        timer.timeout.connect(self.update_figure)
        timer.start(1000)
    
      def compute_initial_figure(self):
        self.axes.grid('on')
        self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')
    
      def update_figure(self):
        # 构建4个随机整数,位于闭区间[0, 10]
        l = [np.random.randint(0, 10) for i in range(4)]
        self.axes.grid('on')
        self.axes.plot([0, 1, 2, 3], l, 'r')
        self.draw()
    
    class MyApp(QMainWindow, Ui_MainWindow):
    
      def __init__(self):
        QMainWindow.__init__(self)
        Ui_MainWindow.__init__(self)
        super().__init__()
    
        self.initUI()
        self.initBtn()
        self.initFrame()
    
      def initFrame(self):
        self.main_widget = self.frame
        self.layout = QVBoxLayout(self.main_widget)
        self.f = MyMplCanvas(self.main_widget)
        self.layout.addWidget(self.f)
    
      def initUI(self):        
    
        self.setupUi(self)
        self.setWindowTitle("PyQt5结合Matplotlib绘图")
        self.setWindowIcon(QIcon("rocket.ico"))  # 设置图标,linux下只有任务栏会显示图标
    
        self.show()
    
      def initBtn(self):
        self.btnPlot.clicked.connect(self.plotButton_callback)
        self.btnPlot.setToolTip("Button")     
    
      def plotButton_callback(self):
    
        self.drawFrame()
    
      def drawFrame(self):
    
        sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)
        dc = MyDynamicMplCanvas(self.f, width=5, height=4, dpi=100)
        self.layout.addWidget(sc)
        self.layout.replaceWidget(self.f,dc) # 替换控件
    
    if __name__ == '__main__':
    
      app = QApplication(sys.argv)
      ex = MyApp()
      sys.exit(app.exec_())

    参考链接:https://www.cnblogs.com/hhh5460/p/4322652.html

    到此这篇关于PyQt5结合matplotlib绘图的实现示例的文章就介绍到这了,更多相关PyQt5结合matplotlib内容请搜索码农之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持码农之家!

    码农之家
    pyqt5与matplotlib的完美结合实例

    12小时54分钟前回答

    pyqt5与matplotlib的完美结合实例

    具体用到了matplotlib.backends.backend_qt5agg.FigureCanvasQTAgg

    直接上代码(这里给出的只是一个简单的框架,告诉你怎么去写):

    # -*- coding: utf-8 -*-
    '''
    TODO:LQD
    '''
    import sys
    import numpy as np
    import matplotlib.pyplot as plt
    from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FC
    from PyQt5.QtWidgets import QApplication, QPushButton, QMainWindow, QVBoxLayout, QWidget
     
     
    class QtDraw(QMainWindow):
      flag_btn_start = True
     
      def __init__(self):
        super(QtDraw, self).__init__()
        self.init_ui()
     
      def init_ui(self):
        self.resize(800, 600)
        self.setWindowTitle('PyQt5 Draw')
     
        # TODO:这里是结合的关键
        self.fig = plt.Figure()
        self.canvas = FC(self.fig)
        self.btn_start = QPushButton(self)
        self.btn_start.setText('draw')
        self.btn_start.clicked.connect(self.slot_btn_start)
     
        widget = QWidget()
        layout = QVBoxLayout()
        layout.addWidget(self.canvas)
        layout.addWidget(self.btn_start)
        widget.setLayout(layout)
        self.setCentralWidget(widget)
     
      def slot_btn_start(self):
        try:
          ax = self.fig.add_subplot(111)
          x = np.linspace(0, 100, 100)
          y = np.random.random(100)
          ax.cla() # TODO:删除原图,让画布上只有新的一次的图
          ax.plot(x, y)
          self.canvas.draw() # TODO:这里开始绘制
        except Exception as e:
          print(e)
     
     
    def ui_main():
      app = QApplication(sys.argv)
      w = QtDraw()
      w.show()
      sys.exit(app.exec_())
     
     
    if __name__ == '__main__':
      ui_main()
    

    以上这篇pyqt5与matplotlib的完美结合实例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持码农之家。

    展开阅读

    上一篇:PyQt5多线程防卡死和多窗口用法的实现

    下一篇:2020版Python学习路线图(附学习资料)

    相关内容

    • win10下python3.5.2、tensorflow和matplotlib安装教程

      今天小编就为大家分享一篇关于python爬虫常用库的安装及其环境配置的文章,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧

      09-19win10下python3.5.2环境及工具安装

      阅读更多
    • python3使用matplotlib绘制散点图实例详解

      这篇文章主要为大家详细介绍了python3使用matplotlib绘制散点图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      01-28python3使用matplotlib绘制散点图

      阅读更多
    • python matplotlib学习绘制动态更新图的代码分享

      这篇文章主要介绍了python之matplotlib学习绘制动态更新图实例代码,文中涉及具体实现代码,演示效果及运行时出现的问题分析等相关内容,小编觉得还是挺不错的,这里分享给大家,需要的朋

      02-15python之matplotlib学习绘制动态更新图实例代码

      阅读更多
    • python+matplotlib实现礼盒柱状图的方法解析

      这篇文章主要介绍了python+matplotlib实现礼盒柱状图实例代码,具有一定借鉴价值,需要的朋友可以参考下

      02-02python+matplotlib实现礼盒柱状图实例代码

      阅读更多
    • Python Matplotlib解决绘图X轴值不按数组排序问题

      这篇文章主要介绍了详解Python Matplotlib解决绘图X轴值不按数组排序问题,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起

      01-29详解Python Matplotlib解决绘图X轴值不按数组排序问题

      阅读更多
    • 如何用python的matplotlib绘制热图

      这篇文章主要为大家详细介绍了python使用matplotlib绘制热图,具有一定的参考价值,感兴趣的小伙伴们可以参考一下

      01-27python使用matplotlib绘制热图

      阅读更多
    • Matplotlib中文手册

      大小:1.17 MBMatplotlib

      点击下载
    • Python数据可视化之matplotlib实践

      Python数据可视化之matplotlib实践

      全方位解读应用matplotlib绘图各种各样数据图表的方式,并灵便设定图型 选用很多实例,使用户能够 依据本身要求灵便应用matplotlib中的涵数、面向对象方法和制图句子 这书依靠Matplotlib解读进

      大小:96.7 MBPython

      点击下载
    • Python数据可视化之matplotlib精进

      Python数据可视化之matplotlib精进

      《Python数据可视化之matplotlib精进》使用大量的matplotlib实用案例讲解Python数据可视化在各个应用方向上的实现方法。通过学习这些实用案例,读者可以更好地掌握Python数据可视化的高级技能。本书主要由图形、元素、交互、探索和拓展5部分组成,每部分的实用案例都有利于拓展matplotlib的应用视野,而且案例中的示例代码只涉及Python的基础知识。这样,在Python数据可视化的实践中,有利于读者将时间和精力放在系统掌握matplotlib知识和技能上面,全面提高对

      大小:104 MBPython

      点击下载

    学习笔记

    20小时35分钟前回答

    PyQt5每天必学之切换按钮_python

    这篇文章主要为大家详细介绍了PyQt5每天必学之切换按钮的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 切换按钮是QPushButton的特殊模式。它是一个具有两种状态的按钮:按压和未按压。我们通过这两种状态之间的切换来修改其它内容。 #!/usr/bin/python3# -*- coding: utf-8 -*-PyQt5 教程在这个例子中,我们创建三个切换按钮。他们将控制一个QFrame的背景颜色。作者:我的世界你曾经来过博客:http://blog.csdn.net/weiaitaowang最后编辑:2016年8月3日import sysfrom PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QFramefrom PyQt5.QtGui import QColorclass Example(QWidget): def __init__(self): super().__init__() self.initUI() def initUI(self……

    17小时32分钟前回答

    python3+PyQt5自定义视图详解

    这篇文章主要为大家详细介绍了python3+PyQt5自定义视图的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 pyqt提供的几个视图类都可以较好工作,包括QLisView,QTableView和QTreeView。但是对于一些难以用现有的方式来呈现数据,这时,可以创建我们自己的视图子类并将其用做模型数据的可视化来解决这一问题。本文通过Python3+pyqt5实现了python Qt GUI 快速编程的16章的例子。 #!/usr/bin/env python3import gzipimport osimport platformimport sysfrom PyQt5.QtCore import (QAbstractTableModel, QDateTime, QModelIndex, QSize, QTimer, QVariant, Qt,pyqtSignal)from PyQt5.QtGui import ( QColor, QCursor, QFont, QFontDatabase, QFontMetrics, QPainter, QPalette, QPixmap)from PyQt5……

    5小时43分钟前回答

    PyQt5 在QListWidget自定义Item的操作

    效果图 自定义一个Item 新建一个QWidget对象 在QWidget内添加Layout 在Layout内添加要的控件 为QWidget设置Layout 新建一个QListWidgetItem并调整大小 为QListWidgetItem设置QWidget 创建布局 首先我们创建一个最基本的布局, 只有一个listWidget和一个pushButton 实现点击button后在listWidget中添加数据 class Windows(QMainWindow, Ui_MainWindow): def __init__(self): super(Windows, self).__init__() self.setupUi(self) self.pushButton.clicked.connect(self.deal) def deal(self): # 准备实现的功能 passapp = QtWidgets.QApplication(sys.argv)windows = Windows()windows.show()sys.exit(app.exec_()) 确定布局 可以看出此布局总体是一个横向布局(QHBoxLayout), 再其右边是一个纵向(QVBoxLayout), 下面的布局又是一个横……