将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程序实例(通讯录)
Nov 29 Python
python实现定时同步本机与北京时间的方法
Mar 24 Python
Python实现对excel文件列表值进行统计的方法
Jul 25 Python
Python3.6连接Oracle数据库的方法详解
May 18 Python
python3 enum模块的应用实例详解
Aug 12 Python
在pandas中遍历DataFrame行的实现方法
Oct 23 Python
在notepad++中实现直接运行python代码
Dec 18 Python
pyinstaller还原python代码过程图解
Jan 08 Python
TensorFlow绘制loss/accuracy曲线的实例
Jan 21 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
Python编解码问题及文本文件处理方法详解
Jun 20 Python
Python pandas之求和运算和非空值个数统计
Aug 07 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 正则匹配函数体
2009/08/25 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
ThinkPHP查询返回简单字段数组的方法
2014/08/25 PHP
基于php实现七牛抓取远程图片
2015/12/01 PHP
php基于dom实现读取图书xml格式数据的方法
2017/02/03 PHP
经验几则 推荐
2006/09/05 Javascript
node.js中的fs.writeSync方法使用说明
2014/12/15 Javascript
javascript中slice(),splice(),split(),substring(),substr()使用方法
2015/03/13 Javascript
原生js实现autocomplete插件
2016/04/14 Javascript
浅谈Javascript中的12种DOM节点类型
2016/08/19 Javascript
利用javascript实现的三种图片放大镜效果实例(附源码)
2017/01/23 Javascript
详解基于vue-router的动态权限控制实现方案
2017/09/28 Javascript
关于react-router/react-router-dom v4 history不能访问问题的解决
2018/01/08 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
vue+element树组件 实现树懒加载的过程详解
2019/10/21 Javascript
Vue+Node实现的商城用户管理功能示例
2019/12/23 Javascript
实用的 vue tags 创建缓存导航的过程实现
2020/12/03 Vue.js
[00:36]TI7不朽珍藏III——斯温不朽展示
2017/07/15 DOTA
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
对python 合并 累加两个dict的实例详解
2019/01/21 Python
使用 Python 写一个简易的抽奖程序
2019/12/08 Python
CSS3实现千变万化的文字阴影text-shadow效果设计
2016/04/26 HTML / CSS
阿联酋航空官方网站:Emirates
2017/10/17 全球购物
伦敦高达60%折扣的钻石珠宝商:Purely Diamonds
2018/06/24 全球购物
印度服装购物网站:Limeroad
2018/09/26 全球购物
运动会通讯稿100字
2014/01/31 职场文书
计算机求职自荐信范文
2014/04/19 职场文书
大学生交通专业求职信
2014/09/01 职场文书
购房委托书
2014/10/15 职场文书
银行给客户的感谢信
2015/01/23 职场文书
综合素质评价自我评价
2015/03/06 职场文书
教师求职信怎么写
2015/03/20 职场文书
关于践行三严三实的心得体会
2016/01/05 职场文书
公司与个人合作协议书
2016/03/19 职场文书
SpringBoot前端后端分离之Nginx服务器下载安装过程
2022/08/14 Servers