将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实现从字符串中找出字符1的位置以及个数的方法
Aug 25 Python
Python机器学习之决策树算法
Dec 22 Python
python pandas dataframe 行列选择,切片操作方法
Apr 10 Python
python获取代码运行时间的实例代码
Jun 11 Python
Python实现将数据写入netCDF4中的方法示例
Aug 30 Python
Python格式化输出字符串方法小结【%与format】
Oct 29 Python
Python3显示当前时间、计算时间差及时间加减法示例代码
Sep 07 Python
python zip()函数使用方法解析
Oct 31 Python
python 读写文件包含多种编码格式的解决方式
Dec 20 Python
Python利用全连接神经网络求解MNIST问题详解
Jan 14 Python
python3实现往mysql中插入datetime类型的数据
Mar 02 Python
tensorflow使用CNN分析mnist手写体数字数据集
Jun 17 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 header函数的常用http头设置
2015/06/25 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
2018/07/31 PHP
PHP实现Snowflake生成分布式唯一ID的方法示例
2020/08/30 PHP
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
ASP SQL防注入的方法
2008/12/25 Javascript
网页加载时页面显示进度条加载完成之后显示网页内容
2012/12/23 Javascript
JS如何将数字类型转化为没3个一个逗号的金钱格式
2014/01/27 Javascript
jQuery老黄历完整实现方法
2015/01/16 Javascript
javascript中for/in循环及使用技巧
2015/09/01 Javascript
javascript针对不确定函数的执行方法
2015/12/16 Javascript
JavaScript提升性能的常用技巧总结【经典】
2016/06/20 Javascript
JS实现微信里判断页面是否被分享成功的方法
2017/06/06 Javascript
轻松理解vue的双向数据绑定问题
2017/10/30 Javascript
jQuery图片查看插件Magnify开发详解
2017/12/25 jQuery
微信小程序支付功能 php后台对接完整代码分享
2018/06/12 Javascript
微信小程序实现文字无限轮播效果
2018/12/28 Javascript
Element 默认勾选表格 toggleRowSelection的实现
2019/09/04 Javascript
通过实例了解JS 连续赋值
2019/09/24 Javascript
详解Vue之计算属性
2020/06/20 Javascript
element-ui中el-upload多文件一次性上传的实现
2020/12/02 Javascript
详解vue3中组件的非兼容变更
2021/03/03 Vue.js
[03:11]DOTA2上海特锦赛小组赛第一日recap精彩回顾
2016/02/28 DOTA
[03:06]3分钟带你回顾DOTA2完美盛典&完美大师赛
2017/12/06 DOTA
Python列表list数组array用法实例解析
2014/10/28 Python
kNN算法python实现和简单数字识别的方法
2014/11/18 Python
python编写暴力破解FTP密码小工具
2014/11/19 Python
Phantomjs抓取渲染JS后的网页(Python代码)
2016/05/13 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
2020/06/02 Python
2021年的Python 时间轴和即将推出的功能详解
2020/07/27 Python
使用Python通过oBIX协议访问Niagara数据的示例
2020/12/04 Python
python 生成正态分布数据,并绘图和解析
2020/12/21 Python
python SOCKET编程基础入门
2021/02/27 Python
课外科技活动总结
2014/08/27 职场文书
铁路安全反思材料
2014/12/24 职场文书
学年个人总结范文
2015/03/05 职场文书
2015年大学宣传部工作总结
2015/05/26 职场文书