pyqt5加载matplotlib图形

news2024/9/25 15:29:56

matplotlib的图形处理非常强大。今天花了很长时间才将matplotlib图形嵌入到pyqt5中。

在这里记录一下,便于以后查寻。有些可能还理解不到位。

开始要导入几个模块:

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas

FigureCanvasQTAgg是一个渲染器,它的工作就是不停的drawing,从而将物体显示在屏幕上。在这里可以理解

为将matplotlib中的figure对象变为一个Qt widgets.

  1. 给界面中的groupBox添加一个布局管理器,代码为:

layout=QVBoxLayout(self.groupBox)

  1. 把渲染器添加到该布局中代码为:

layout.addWidget(self.static_canvas)

  1. 从渲染器的画布figure中,然后就可以进行子布局,渲染器为:self.static_canvas ,画布为:self.static_canvas.figure

然后单个创建的方法为(eg:创建2行列):ax1=self.self.static_canvas.figure.add_subplot(211),

ax2=self.self.static_canvas.figure.add_subplot(212)

第二种方法:ax1,ax2= self.static_canvas.figure.subplots(2,1)

4.如果要向会矩形,圆形也可以。先导入from matplotlib.pyplot import Rectangle

# ax1=self.static_canvas.figure.add_subplot(111)

# # rect=Rectangle((0.3,0.75),0.6,0.7,color='g')

# rect=Rectangle((3,3),6,8,color='g')

# ax1.add_patch(rect)

完整代码:

from PyQt5.Qt import *
from PyQt5.uic import loadUi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import numpy as np
from matplotlib.figure import Figure
from  matplotlib.pyplot import Rectangle




class Window(QWidget):
    def __init__(self):
        super().__init__()
        # loadUi('plot_gui.ui',self)
        # self.setWindowTitle("的学习")
        layout=QVBoxLayout()
        self.groupBox=QGroupBox()
        self.groupBox_2=QGroupBox()
        layout.addWidget(self.groupBox)
        layout.addWidget(self.groupBox_2)
        self.setLayout(layout)

        self.setup_ui()



    def setup_ui(self):
        self.static_canvas = FigureCanvas(Figure(figsize=(5,3)))
        layout=QVBoxLayout(self.groupBox)
        layout.addWidget(self.static_canvas)

        x=np.linspace(0,2*np.pi)
        y=np.cos(x)

        ax1,ax2= self.static_canvas.figure.subplots(2,1)
        ax1.plot(x,y)

        # ax1=self.static_canvas.figure.add_subplot(111)
        # ax1.plot(x,y)


        # ax1=self.static_canvas.figure.add_subplot(111)
        # # rect=Rectangle((0.3,0.75),0.6,0.7,color='g')
        # rect=Rectangle((3,3),6,8,color='g')
        # ax1.add_patch(rect)





if __name__ == '__main__':
    import sys
    app=QApplication(sys.argv)

    win=Window()
    win.show()

from PyQt5.Qt import *
from PyQt5.uic import loadUi
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar
import numpy as np
from matplotlib.figure import Figure
from matplotlib.pyplot import Rectangle


class Window(QWidget):
    def __init__(self):
        super().__init__()
        # loadUi('plot_gui.ui',self)
        # self.setWindowTitle("的学习")
        self.resize(900,700)
        layout = QVBoxLayout()
        self.groupBox = QGroupBox()
        self.groupBox_2 =  QGroupBox()
        layout.addWidget(self.groupBox)
        layout.addWidget(self.groupBox_2)
        self.setLayout(layout)

        self.setup_ui()

    def setup_ui(self):
        '''创建布局器,然后布局器里添加控件 比如画布,工具'''
        self.static_canvas = FigureCanvas(Figure(figsize=(5, 3)))#创建一个画布
        layout = QVBoxLayout(self.groupBox)
        layout.addWidget(self.static_canvas)

        x = np.linspace(0, 2 * np.pi)
        y = np.cos(x)

        self.ax1, self.ax2 = self.static_canvas.figure.subplots(2, 1)
        self.ax1.plot(x, y)

        # ax1=self.static_canvas.figure.add_subplot(111)
        # ax1.plot(x,y)

        # ax1=self.static_canvas.figure.add_subplot(111)
        # # rect=Rectangle((0.3,0.75),0.6,0.7,color='g')
        # rect=Rectangle((3,3),6,8,color='g')
        # ax1.add_patch(rect)

        self.timer = QTimer()
        self.timer.timeout.connect(self.refresh_plot)
        self.timer.start(100)
        self.i = 0
        self.t = []
        self.s = []

        self.canvas_2 = FigureCanvas(Figure()) #创建第二个画布
        tool_bar = NavigationToolbar(self.canvas_2,self.groupBox_2)
        layout2 = QVBoxLayout(self.groupBox_2) #创建布局器
        layout2.addWidget(self.canvas_2) #添加画布
        layout2.addWidget(tool_bar)      #添加工具

        t=np.linspace(0,10,501)
        self.ax3=self.canvas_2.figure.subplots()
        self.ax3.plot(t,np.sin(t)*np.cos(2*t))


    def refresh_plot(self):
        self.i += 0.01
        self.t.append(self.i)
        self.s.append(np.sin(2*np.pi*self.i))
        self.ax2.cla()
        self.ax2.plot(self.t,self.s)
        self.static_canvas.draw()



if __name__ == '__main__':
    import sys

    app = QApplication(sys.argv)

    win = Window()
    win.show()

    sys.exit(app.exec_())

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/151222.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

tomcat下载和配置(简单,详细)

下载 官网:http://tomcat.apache.org/ 找到需要的版本,点击download 在download页面,选择需要下载的。(分为压缩版和安装版,我比较推荐压缩版,省事解压缩就好) 配置 首先!&…

[ 数据结构 ] 集合覆盖问题(贪心算法)

0 集合覆盖问题 假设存在如下表的需要付费的广播台,以及广播台信号可以覆盖的地区。 如何选择最少的广播台,让所有的地区都可以接收到信号 广播台覆盖地区K1北京,上海,天津K2广州,北京,深圳K3成都,上海,杭州K4上海,天津K5杭州,大连 思路分析①:穷举法,…

LeetCode 64 最小路径和 | 解题思路分享

原题链接:64. 最小路径和 题目难度:中等 题目描述 给定一个包含非负整数的 m x n 网格 grid ,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小。 **说明:**每次只能向下或者向右移动一步。 示例 1&…

Apache Spark + 海豚调度:PB 级数据调度挑战,教你如何构建高效离线工作流

2010年,我国进入移动互联网,数据规模成几何式增长。在大数据开源技术领域,以Hadoop为核心的大数据生态系统面对海量数据也不断发展与迭代,大数据处理流程中的各个开源组件,也一起开启了狂飙突进的大数据时代&#xff0…

MyBatis---初入

MyBatis快速入门 文章目录MyBatis快速入门MyBatisMyBatis开发步骤添加MyBatis的坐标创建user数据表编写user实体类编写映射文件UserMapper.xml编写核心文件SqlMapConfig.xml编写测试类MyBatis Mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只…

疫情放开后,如何保护居家员工的办公安全?

随着疫情的放开,大多数企业的员工因“阳”不得不在家办公。据当前的趋势来看,一线城市的大小企业已经出现高比例的员工感染,不少工作人员或出于安全的考虑选择居家办公。但无论是被迫居家隔离,还是主动远程办公,大多数…

Redis缓存何以一枝独秀?——从百变应用场景与热门面试题中感受下Redis的核心特性与使用注意点

大家好,又见面了。 本文是笔者作为掘金技术社区签约作者的身份输出的缓存专栏系列内容,将会通过系列专题,讲清楚缓存的方方面面。如果感兴趣,欢迎关注以获取后续更新。 作为《深入理解缓存原理与实战设计》系列专栏,在…

国产高清卫星影像时代来了,打造中国版“谷歌地球”!

随着国家数字化战略转型进程不断加快,卫星遥感影像作为基础数据,应用越来越广泛。目前已经成为资源环境调查、监测、评价和管理等不可或缺的技术手段。 不止于此,在推动行业发展、提高生产力以及节约成本等方面,卫星遥感影像都实…

【半监督医学图像分割 2022 CVPR】S4CVnet 论文翻译

【半监督医学图像分割 2022 CVPR】S4CVnet论文翻译 论文题目:When CNN Meet with ViT: Towards Semi-Supervised Learning for Multi-Class Medical Image Semantic Segmentation 中文题目:当CNN与ViT相遇:面向多类医学图像语义分割的半监督学习 论文链接…

kotlin必备基础一

kotlin 必备基础方法的声明成员方法类方法(静态方法)单表达式方法局部方法方法高级特性高阶函数函数作为参数函数作为返回值闭包(Cloure)闭包的特性闭包的好处解构申明匿名方法kotlin 方法字面值方法参数默认参数可变数量参数Lamb…

【机器学习】K近邻算法(K-NearestNeighbors , KNN)详解 + Java代码实现

文章目录一、KNN 基本介绍二、KNN 核心思想三、KNN 算法流程四、KNN 优缺点五、Java 代码实现 KNN六、KNN 改进策略一、KNN 基本介绍 邻近算法,或者说K最邻近(KNN,K-NearestNeighbors)分类算法是分类方法中最简单的方法之一。所谓…

Cadence PCB仿真使用Allegro PCB SI为分立元件创建统一的模型并赋值方法图文教程

⏪《上一篇》   🏡《总目录》   ⏩《下一篇》 目录 1,概述2,配置方法3,总结1,概述 本文简单介绍使用Allegro PCB SI软件配置电压地网络电压的方法。 2,配置方法 第1步:打开待仿真的PCB文件,并确认软件为Allegro PCB SI 如果,打开软件不是Allegro PCB SI则可这样…

[ 数据结构 ] 背包问题(动态规划)

0 背包问题 有一个背包,容量为4磅,现有如下物品 物品重量价格吉他(G)11500音响(S)43000电脑(L)32000 1)要求达到的目标为装入的背包的总价值最大,并且重量不超出 2)要求装入的物品不能重复(01背包) 1 动态规划 动态规划(Dynamic Programming)算法的核心思想是&…

从0到1完成一个Vue后台管理项目(十一、前端分页实现)

往期 从0到1完成一个Vue后台管理项目(一、创建项目) 从0到1完成一个Vue后台管理项目(二、使用element-ui) 从0到1完成一个Vue后台管理项目(三、使用SCSS/LESS,安装图标库) 从0到1完成一个Vu…

测试分析--精准分析

测试分析的概念 测试分析是建立在对「需求本身」、「用户使用场景」以及对应的「系统架构」和「实现细节」的充分了解的基础上,通过对数据流、状态变化、逻辑时序、功能/性能/兼容性等方面的分析,得出测试点的过程; 在现阶段敏捷开发模式普遍…

【部分真题】2022年12月QMS质量管理体系试题(1-5题)尚大解析版

注1:由于是机考,题目顺序随机变化,但题目内容所有考生一致。 注2:选择题的选项顺序会随机改变,但选项的内容不变。 注3:为了方便学员学习与复习,已经按教程&考试大纲进行全面优化排序。 注4…

4644. 求和

4644. 求和 https://www.acwing.com/problem/content/description/4647/ 第十三届蓝桥杯省赛CA/C组 , 第十三届蓝桥杯省赛JAVAA组 算法标签:推公式;前缀和 思路 推公式做法: (a1a2a3...an)2a12a22a32...an22a1a22a1a3...2a1an2a2a3...2an−…

【模板】最小生成树(C++)

题目描述 如题,给出一个无向图,求出最小生成树,如果该图不连通,则输出 orz。 输入格式 第一行包含两个整数 N,MN,MN,M,表示该图共有 NNN 个结点和 MMM 条无向边。 接下来 MMM 行每行包含三个整数 Xi,Yi,ZiX_i,Y_i,…

设计师必备的免费样机素材

很多设计师会用样机模型来展示自己的作品,让设计图案、应用界面等作品应用到实物效果图中,能体现作品的最终效果,更加形象逼真。哪里能下载到样机模板呢?今天我就推荐6个网站帮你解决,赶紧收藏! 1、菜鸟图库…

20230109测试ToyBrick的RK3588开发板运行Buildroot的V0.02版本(20220312)

20230109测试ToyBrick的RK3588开发板运行Buildroot的V0.02版本(20220312) 2023/1/9 18:03 https://wiki.t-firefly.com/zh_CN/Firefly-Linux-Guide/manual_buildroot.html 1. Buildroot 使用手册 1.1. 桌面应用 官方发布的 Buildroot 固件,默…