将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 import引入不同路径下的模块
Jul 11 Python
Python实现PS滤镜特效Marble Filter玻璃条纹扭曲效果示例
Jan 29 Python
Python测试人员需要掌握的知识
Feb 08 Python
Python实现爬虫从网络上下载文档的实例代码
Jun 13 Python
Python实现连接MySql数据库及增删改查操作详解
Apr 16 Python
Python3 JSON编码解码方法详解
Sep 06 Python
基于python cut和qcut的用法及区别详解
Nov 22 Python
python 实现视频 图像帧提取
Dec 10 Python
从pandas一个单元格的字符串中提取字符串方式
Dec 17 Python
基于TensorFlow常量、序列以及随机值生成实例
Jan 04 Python
Python中求对数方法总结
Mar 10 Python
Python读写操作csv和excle文件代码实例
Mar 16 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的异常处理类Exception的使用及说明
2012/06/13 PHP
php实现猴子选大王问题算法实例
2015/04/20 PHP
php正则preg_replace_callback函数用法实例
2015/06/01 PHP
JavaScript 学习笔记(四)
2009/12/31 Javascript
javascript之typeof、instanceof操作符使用探讨
2013/05/19 Javascript
javascript如何使用bind指定接收者
2014/05/04 Javascript
jQuery中queue()方法用法实例
2014/12/29 Javascript
EasyUI中datagrid在ie下reload失败解决方案
2015/03/09 Javascript
基于JavaScript获取鼠标位置的各种方法
2015/12/16 Javascript
AngularJS身份验证的方法
2016/02/17 Javascript
原生JS实现图片轮播与淡入效果的简单实例
2016/08/21 Javascript
AngularJS中如何使用echart插件示例详解
2016/10/26 Javascript
新手学习前端之js模仿淘宝主页网站
2016/10/31 Javascript
浅析vue数据绑定
2017/01/17 Javascript
Vue中的字符串模板的使用
2018/05/17 Javascript
使用javascript做时间倒数读秒功能的实例
2019/01/23 Javascript
Vue在 Nuxt.js 中重定向 404 页面的方法
2019/04/23 Javascript
vue中template的三种写法示例
2020/10/21 Javascript
[02:28]PWL开团时刻DAY3——Ink Ice与DeMonsTer之间的勾心斗角
2020/11/03 DOTA
Python实现自动登录百度空间的方法
2017/06/10 Python
python实现员工管理系统
2018/01/11 Python
Tensorflow实现卷积神经网络用于人脸关键点识别
2018/03/05 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python定义一个跨越多行的字符串的多种方法小结
2018/07/19 Python
Python中函数参数匹配模型详解
2019/06/09 Python
如何基于python测量代码运行时间
2019/12/25 Python
Django之全局使用request.user.username的实例详解
2020/05/14 Python
H5 canvas中width、height和style的宽高区别详解
2018/11/02 HTML / CSS
怎么写自荐书范文
2014/02/12 职场文书
植树造林的宣传标语
2014/06/23 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
企业安全生产目标责任书
2014/07/23 职场文书
毕业实习指导教师评语
2014/12/31 职场文书
2016年优秀共产党员先进事迹材料
2016/02/29 职场文书
python实现高效的遗传算法
2021/04/07 Python
再也不用花钱买漫画!Python爬取某漫画的脚本及源码
2021/06/09 Python