将matplotlib绘图嵌入pyqt的方法示例


Posted in Python onJanuary 08, 2020

我的终极整理,供参考

# coding:utf-8
import matplotlib
# 使用 matplotlib中的FigureCanvas (在使用 Qt5 Backends中 FigureCanvas继承自QtWidgets.QWidget)
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from PyQt5 import QtCore, QtWidgets, QtGui
from PyQt5.QtWidgets import QDialog, QPushButton, QVBoxLayout
import matplotlib.pyplot as plt
import numpy as np
import sys
"""学好pyplot API和面向对象 API搞定matplotlib绘图显示在GUI界面上"""
 
class Main_window(QDialog):
  def __init__(self):
    super().__init__()
    # 三步走,定Figure,定Axes,定FigureCanvas
    # 1 直接一段代码搞定figure和axes
    self.figure, (self.ax1, self.ax2) = plt.subplots(figsize=(13, 3), ncols=2)
 
    # 2 先创建figure再创建axes
    # 2.1 用plt.figure() / Figure() 创建figure, 推荐前者
    self.figure = plt.figure(figsize=(5,3), facecolor='#FFD7C4')
    # self.figure = Figure(figsize=(5,3), facecolor='#FFD7C4')
    # 2.2 用plt.subplots() / plt.add_subplot() 创建axes, 推荐前者
    (self.ax1, self.ax2) = self.figure.subplots(1, 2)
    # ax1 = self.figure.add_subplot(121)
    # ax2 = self.figure.add_subplot(122)
 
    # 3 绑定figure到canvas上
    self.canvas = FigureCanvas(self.figure)
 
    self.button_draw = QPushButton("绘图")
    self.button_draw.clicked.connect(self.Draw)
 
    # 设置布局
    layout = QVBoxLayout()
    layout.addWidget(self.canvas)
    layout.addWidget(self.button_draw)
    self.setLayout(layout)
 
  def Draw(self):
    AgeList = ['10', '21', '12', '14', '25']
    NameList = ['Tom', 'Jon', 'Alice', 'Mike', 'Mary']
    # 将AgeList中的数据转化为int类型
    AgeList = list(map(int, AgeList))
 
    # 将x,y转化为numpy数据类型,对于matplotlib很重要
    self.x = np.arange(len(NameList)) + 1
    self.y = np.array(AgeList)
 
    # tick_label后边跟x轴上的值,(可选选项:color后面跟柱型的颜色,width后边跟柱体的宽度)
    self.ax1.bar(range(len(NameList)), AgeList, tick_label=NameList, color='green', width=0.5)
    for a, b in zip(self.x, self.y):
      self.ax1.text(a-1, b, '%d' % b, ha='center', va='bottom')
    plt.title("Demo")
 
    pos = self.ax2.imshow(np.random.random((100, 100)), cmap=plt.cm.BuPu_r)
    self.figure.colorbar(pos, ax=self.ax2)   # 终于可以用colorbar了
 
    self.canvas.draw()
 
 
# 运行程序
if __name__ == '__main__':
  app = QtWidgets.QApplication(sys.argv)
  main_window = Main_window()
  main_window.show()
  app.exec()

总结就是,想要在特定的位置放matplotlib绘图还是要用面向对象的API,但混合使用pyplot的API可以使代码更简单。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现的金山快盘的签到程序
Jan 17 Python
Python库urllib与urllib2主要区别分析
Jul 13 Python
浅谈Scrapy框架普通反爬虫机制的应对策略
Dec 28 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
python自定义时钟类、定时任务类
Feb 22 Python
使用pip安装python库的多种方式
Jul 31 Python
Python列表(list)所有元素的同一操作解析
Aug 01 Python
详解mac python+selenium+Chrome 简单案例
Nov 08 Python
Python使用Numpy模块读取文件并绘制图片
May 13 Python
使用tensorflow实现VGG网络,训练mnist数据集方式
May 26 Python
python使用列表的最佳方案
Aug 12 Python
用Python实现屏幕截图详解
Jan 22 Python
pyinstaller还原python代码过程图解
Jan 08 #Python
python Tensor和Array对比分析
Jan 08 #Python
Pycharm小白级简单使用教程
Jan 08 #Python
python如何实现不可变字典inmutabledict
Jan 08 #Python
PyQt5 closeEvent关闭事件退出提示框原理解析
Jan 08 #Python
python从内存地址上加载python对象过程详解
Jan 08 #Python
PyCharm第一次安装及使用教程
Jan 08 #Python
You might like
php求两个目录的相对路径示例(php获取相对路径)
2014/03/27 PHP
jquery预览图片实现鼠标放上去显示实际大小
2014/01/16 Javascript
使用js判断TextBox控件值改变然后出发事件
2014/03/07 Javascript
深入理解JavaScript系列(18):面向对象编程之ECMAScript实现
2015/03/05 Javascript
浅谈JavaScript异常处理语句
2015/06/26 Javascript
关于事件mouseover ,mouseout ,mouseenter,mouseleave的区别
2015/10/12 Javascript
jQuery.trim() 函数及trim()用法详解
2015/10/26 Javascript
Vue.js快速入门实例教程
2016/10/15 Javascript
vue的基本用法与常见指令
2017/08/15 Javascript
详解在vue-cli中使用路由
2017/09/25 Javascript
vue 根据数组中某一项的值进行排序的方法
2018/08/30 Javascript
vue项目上传Github预览的实现示例
2018/11/06 Javascript
小程序获取当前位置加搜索附近热门小区及商区的方法
2019/04/08 Javascript
使用kbone解决Vue项目同时支持小程序问题
2019/11/08 Javascript
原生JS与CSS实现软件卸载对话框功能
2019/12/05 Javascript
[02:41]DOTA2英雄基础教程 谜团
2013/12/10 DOTA
精确查找PHP WEBSHELL木马的方法(1)
2011/04/12 Python
Python的词法分析与语法分析
2013/05/18 Python
python绘图库Matplotlib的安装
2014/07/03 Python
在Django中限制已登录用户的访问的方法
2015/07/23 Python
TensorFlow实现随机训练和批量训练的方法
2018/04/28 Python
Python实现输入二叉树的先序和中序遍历,再输出后序遍历操作示例
2018/07/27 Python
python中的for循环
2018/09/28 Python
django2笔记之路由path语法的实现
2019/07/17 Python
浅谈Python中threading join和setDaemon用法及区别说明
2020/05/02 Python
python中random.randint和random.randrange的区别详解
2020/09/20 Python
详解Anaconda安装tensorflow报错问题解决方法
2020/11/01 Python
独特的礼品和创新的科技产品:The Grommet
2018/02/24 全球购物
护理专业大学生自我推荐信
2014/01/25 职场文书
音乐节策划方案
2014/06/09 职场文书
淘宝好评语句大全
2014/12/31 职场文书
积极心理学课程心得体会
2016/01/22 职场文书
施工安全协议书
2016/03/22 职场文书
golang 接口嵌套实现复用的操作
2021/04/29 Golang
如何在Python项目中引入日志
2021/05/31 Python
PyTorch中的torch.cat简单介绍
2022/03/17 Python