将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神器对付12306变态验证码
Jan 05 Python
Python中pandas dataframe删除一行或一列:drop函数详解
Jul 03 Python
python 利用文件锁单例执行脚本的方法
Feb 19 Python
详解python配置虚拟环境
Apr 08 Python
numpy求平均值的维度设定的例子
Aug 24 Python
flask框架url与重定向操作实例详解
Jan 25 Python
Django关于admin的使用技巧和知识点
Feb 10 Python
Python拼接字符串的7种方式详解
Mar 19 Python
Python使用GitPython操作Git版本库的方法
Feb 29 Python
python基本算法之实现归并排序(Merge sort)
Sep 01 Python
Python通过Schema实现数据验证方式
Nov 12 Python
python 常用的异步框架汇总整理
Jun 18 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写的简易聊天室代码
2011/06/04 PHP
ThinkPHP跳转页success及error模板实例教程
2014/07/17 PHP
PHP实现的激活用户注册验证邮箱功能示例
2017/06/06 PHP
javascript 获取网页参数系统
2008/07/19 Javascript
GridView中获取被点击行中的DropDownList和TextBox中的值
2013/07/18 Javascript
JS中getYear()和getFullYear()区别分析
2014/07/04 Javascript
VS2008中使用JavaScript调用WebServices
2014/12/18 Javascript
js 弹出对话框(遮罩)透明,可拖动的简单实例
2016/07/11 Javascript
微信小程序 WXML、WXSS 和JS介绍及详解
2016/10/08 Javascript
详解百度百科目录导航树小插件
2017/01/08 Javascript
jQuery ajax读取本地json文件的实例
2017/10/31 jQuery
微信小程序实现自定义modal弹窗封装的方法
2018/06/15 Javascript
详解ECMAScript typeof用法
2018/07/25 Javascript
让axios发送表单请求形式的键值对post数据的实例
2018/08/11 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
Jquery属性的获取/设置及样式添加/删除操作技巧分析
2019/12/23 jQuery
使用webpack5从0到1搭建一个react项目的实现步骤
2020/12/16 Javascript
[02:39]DOTA2英雄基础教程 天怒法师
2013/11/29 DOTA
python计算圆周长、面积、球体体积并画出圆
2014/04/08 Python
Python模拟登陆实现代码
2017/06/14 Python
python获取代理IP的实例分享
2018/05/07 Python
python实现五子棋小程序
2019/06/18 Python
python 两个数据库postgresql对比
2019/10/21 Python
python爬虫模拟浏览器的两种方法实例分析
2019/12/09 Python
python 字典套字典或列表的示例
2019/12/16 Python
Jupyter Notebook 实现正常显示中文和负号
2020/04/24 Python
Python定时任务APScheduler原理及实例解析
2020/05/30 Python
Python建造者模式案例运行原理解析
2020/06/29 Python
8款精美的CSS3表单设计(登录表单/下拉选择/按钮附演示及源码)
2013/02/04 HTML / CSS
美国在线印刷公司:PsPrint
2017/10/12 全球购物
行政人员岗位职责
2013/12/08 职场文书
优秀教师个人总结
2015/02/11 职场文书
事业单位个人总结
2015/02/12 职场文书
八年级物理教学反思
2016/02/19 职场文书
MySQL批量更新不同表中的数据
2022/05/11 MySQL
JS轻量级函数式编程实现XDM三
2022/06/16 Javascript