将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中list循环语句用法实例
Nov 10 Python
介绍Python中的一些高级编程技巧
Apr 02 Python
Python中内置数据类型list,tuple,dict,set的区别和用法
Dec 14 Python
Python中的sort()方法使用基础教程
Jan 08 Python
python中字符串变二维数组的实例讲解
Apr 03 Python
对python list 遍历删除的正确方法详解
Jun 29 Python
python实现对列表中的元素进行倒序打印
Nov 23 Python
python实现ftp文件传输系统(案例分析)
Mar 20 Python
Python判断三段线能否构成三角形的代码
Apr 12 Python
Python虚拟环境的创建和包下载过程分析
Jun 19 Python
Python Flask异步发送邮件实现方法解析
Aug 01 Python
Django展示可视化图表的多种方式
Apr 08 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 5.2.14+fpm+memcached(具体操作详解)
2013/06/18 PHP
PHP中__FILE__、dirname与basename用法实例分析
2014/12/01 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
thinkPHP5框架分页样式类完整示例
2018/09/01 PHP
laravel框架模板之公共模板、继承、包含实现方法分析
2019/08/30 PHP
JavaScript RegExp方法获取地址栏参数(面向对象)
2009/03/10 Javascript
IE bug table元素的innerHTML
2010/01/11 Javascript
14款NodeJS Web框架推荐
2014/07/11 NodeJs
Javascript中Array用法实例分析
2015/06/13 Javascript
jquery获取多个checkbox的值异步提交给php
2015/07/07 Javascript
JS打字效果的动态菜单代码分享
2015/08/21 Javascript
JS+CSS实现鼠标滑过时动态翻滚的导航条效果
2015/09/24 Javascript
深入理解javascript中的 “this”
2017/01/17 Javascript
Bootstrap多级菜单的实现代码
2017/05/23 Javascript
详解vue组件通信的三种方式
2017/06/30 Javascript
vue2手机APP项目添加开屏广告或者闪屏广告
2017/11/28 Javascript
JS实现去除数组中重复json的方法示例
2017/12/21 Javascript
发布一款npm包帮助理解npm的使用
2019/01/03 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
vue+axios全局添加请求头和参数操作
2020/07/24 Javascript
jquery插件实现轮播图效果
2020/10/19 jQuery
构建一个JavaScript插件系统
2020/10/20 Javascript
[01:19]DOTA2城市挑战赛报名开始 开启你的城市传奇
2018/03/23 DOTA
把项目从Python2.x移植到Python3.x的经验总结
2015/04/20 Python
Python中的localtime()方法使用详解
2015/05/22 Python
Python爬虫实例_城市公交网络站点数据的爬取方法
2018/01/10 Python
Python基于csv模块实现读取与写入csv数据的方法
2018/01/18 Python
将Django项目部署到CentOs服务器中
2018/10/18 Python
基于opencv的selenium滑动验证码的实现
2020/07/24 Python
Python 按比例获取样本数据或执行任务的实现代码
2020/12/03 Python
CSS3中动画属性transform、transition和animation属性的区别
2016/09/25 HTML / CSS
财务科科长岗位职责
2014/03/10 职场文书
学校节能减排倡议书
2014/05/16 职场文书
家具商场的活动方案
2014/08/16 职场文书
老公保证书怎么写
2015/02/26 职场文书
python tkinter Entry控件的焦点移动操作
2021/05/22 Python