将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中for循环控制语句用法实例
Jun 02 Python
Python3 模块、包调用&路径详解
Oct 25 Python
彻底理解Python list切片原理
Oct 27 Python
Python遍历pandas数据方法总结
Feb 09 Python
python打包压缩、读取指定目录下的指定类型文件
Apr 12 Python
对python函数签名的方法详解
Jan 22 Python
django2.2安装错误最全的解决方案(小结)
Sep 24 Python
Python 窗体(tkinter)下拉列表框(Combobox)实例
Mar 04 Python
PyCharm2020.1.2社区版安装,配置及使用教程详解(Windows)
Aug 07 Python
pytorch 使用半精度模型部署的操作
May 24 Python
Python基础知识学习之类的继承
May 31 Python
python数字图像处理:图像的绘制
Jun 28 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的安全
2006/10/09 PHP
php 信息采集程序代码
2009/03/17 PHP
php smarty 二级分类代码和模版循环例子
2011/06/16 PHP
ThinkPHP缓存方法S()概述
2014/06/13 PHP
Thinkphp单字母函数使用指南
2016/05/08 PHP
PHP 5.6.11 访问SQL Server2008R2的几种情况详解
2016/08/08 PHP
PHP文件上传处理案例分析
2016/10/15 PHP
firefox插件Firebug的使用教程
2010/01/02 Javascript
javascript dom代码应用 简单的相册[firefox only]
2010/06/12 Javascript
读jQuery之三(构建选择器)
2011/06/11 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
让JavaScript和其它资源并发下载的方法
2014/10/16 Javascript
jQuery UI插件自定义confirm确认框的方法
2015/03/20 Javascript
JS模式之简单的订阅者和发布者模式完整实例
2015/06/30 Javascript
jQuery AJAX timeout 超时问题详解
2016/06/21 Javascript
Bootstrap模态框(modal)垂直居中的实例代码
2016/08/18 Javascript
利用python分析access日志的方法
2016/10/26 Javascript
基于Vue2的移动端开发环境搭建详解
2016/11/03 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
javascript实现Java中的Map对象功能的实例详解
2017/08/21 Javascript
AngularJS实现controller控制器间共享数据的方法示例
2017/10/30 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
vue的token刷新处理的方法
2018/07/17 Javascript
在vue中使用echarts图表实例代码详解
2018/10/22 Javascript
js 计算图片内点个数的示例代码
2019/04/04 Javascript
详解Nuxt.js 实战集锦
2019/11/19 Javascript
Postman动态获取返回值过程详解
2020/06/30 Javascript
用vue写一个日历
2020/11/02 Javascript
[00:32]2018DOTA2亚洲邀请赛出场——LGD
2018/04/04 DOTA
在Python中字典根据多项规则排序的方法
2019/01/21 Python
纯CSS3实现的阴影效果
2014/12/24 HTML / CSS
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
中学生个人自我评价
2014/02/06 职场文书
投资意向书范本
2014/04/01 职场文书
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers
windows11选中自动复制怎么开启? Win11自动复制所选内容的方法
2022/07/23 数码科技