将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对文件操作知识汇总
May 15 Python
Python的Flask框架中配置多个子域名的方法讲解
Jun 07 Python
Python 详解基本语法_函数_返回值
Jan 22 Python
Python实现OpenCV的安装与使用示例
Mar 30 Python
Python实现简单的文本相似度分析操作详解
Jun 16 Python
解决python中用matplotlib画多幅图时出现图形部分重叠的问题
Jul 07 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
Jul 12 Python
解决win7操作系统Python3.7.1安装后启动提示缺少.dll文件问题
Jul 15 Python
Python各种扩展名区别点整理
Feb 27 Python
Django ORM 查询表中某列字段值的方法
Apr 30 Python
解决Keras TensorFlow 混编中 trainable=False设置无效问题
Jun 28 Python
10个顶级Python实用库推荐
Mar 04 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脚本的10个技巧(7)
2006/10/09 PHP
PHP 上传文件大小限制
2009/07/05 PHP
一个简单的PHP验证码实现代码
2014/05/10 PHP
ThinkPHP基于PHPExcel导入Excel文件的方法
2014/10/15 PHP
Symfony2实现从数据库获取数据的方法小结
2016/03/18 PHP
PHP错误处理函数
2016/04/03 PHP
PHP基于GD库实现的生成图片缩略图函数示例
2017/07/05 PHP
JavaScript实现弹出子窗口并传值给父窗口
2014/12/18 Javascript
详解为Angular.js内置$http服务添加拦截器的方法
2016/12/20 Javascript
jquery实现多次上传同一张图片
2017/01/09 Javascript
jQuery插件HighCharts实现的2D面积图效果示例【附demo源码下载】
2017/03/15 Javascript
React Native悬浮按钮组件的示例代码
2018/04/05 Javascript
JS/HTML5游戏常用算法之碰撞检测 像素检测算法实例详解
2018/12/12 Javascript
js/jQuery实现全选效果
2019/06/17 jQuery
vue input标签通用指令校验的实现
2019/11/05 Javascript
js实现动态时钟
2020/03/12 Javascript
[01:05:30]VP vs TNC 2018国际邀请赛小组赛BO2 第一场 8.17
2018/08/20 DOTA
Python脚本实现集群检测和管理功能
2015/03/06 Python
python将ansible配置转为json格式实例代码
2017/05/15 Python
详解Appium+Python之生成html测试报告
2019/01/04 Python
[机器视觉]使用python自动识别验证码详解
2019/05/16 Python
Python 中判断列表是否为空的方法
2019/11/24 Python
Python中顺序表原理与实现方法详解
2019/12/03 Python
python使用numpy实现直方图反向投影示例
2020/01/17 Python
tensorflow使用L2 regularization正则化修正overfitting过拟合方式
2020/05/22 Python
python中类与对象之间的关系详解
2020/12/16 Python
CSS3中:nth-child和:nth-of-type的区别深入理解
2014/03/10 HTML / CSS
聪明的粉丝购买门票的地方:TickPick
2018/03/09 全球购物
英国信箱在线鲜花速递公司:Bloom & Wild
2019/03/10 全球购物
美德好少年主要事迹
2014/01/29 职场文书
农村葬礼主持词
2014/03/31 职场文书
毕业生找工作自荐书
2014/06/30 职场文书
法定代表人授权委托书范文
2014/08/02 职场文书
好的促销活动方案
2014/08/21 职场文书
工商局个人工作总结
2015/03/03 职场文书
phpQuery解析HTML乱码问题(补充官网未列出的乱码解决方案)
2021/04/01 PHP