将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实现汉诺塔方法汇总
Jul 25 Python
python utc datetime转换为时间戳的方法
Jan 15 Python
python读取目录下所有的jpg文件,并显示第一张图片的示例
Jun 13 Python
Python Web框架之Django框架cookie和session用法分析
Aug 16 Python
解决Python二维数组赋值问题
Nov 28 Python
pytorch之Resize()函数具体使用详解
Feb 27 Python
在matplotlib中改变figure的布局和大小实例
Apr 23 Python
python基于pygame实现飞机大作战小游戏
Nov 19 Python
python 批量下载bilibili视频的gui程序
Nov 20 Python
python实现启动一个外部程序,并且不阻塞当前进程
Dec 05 Python
pycharm 实现复制一行的快捷键
Jan 15 Python
pandas中关于apply+lambda的应用
Feb 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实现网上点歌(二)
2006/10/09 PHP
PhpMyAdmin中无法导入sql文件的解决办法
2010/01/08 PHP
一些被忽视的PHP函数(简单整理)
2010/04/30 PHP
thinkphp3.0 模板中函数的使用
2012/11/13 PHP
smarty简单入门实例
2014/11/28 PHP
Yii实现显示静态页的方法
2016/04/25 PHP
Jquery性能优化详解
2014/05/15 Javascript
Nodejs Post请求报socket hang up错误的解决办法
2014/09/25 NodeJs
JavaScript添加随滚动条滚动窗体的方法
2016/02/23 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
js获取元素的外链样式的简单实现方法
2016/06/06 Javascript
vue双向数据绑定原理探究(附demo)
2017/01/17 Javascript
vue-router重定向不刷新问题的解决
2018/06/25 Javascript
Element-ui之ElScrollBar组件滚动条的使用方法
2018/09/14 Javascript
iview在vue-cli3如何按需加载的方法
2018/10/31 Javascript
vue插件draggable实现拖拽移动图片顺序
2018/12/01 Javascript
总结4个方面优化Vue项目
2019/02/11 Javascript
Vue 幸运大转盘实现思路详解
2019/05/06 Javascript
vue中使用element组件时事件想要传递其他参数的问题
2019/09/18 Javascript
python基础教程之自定义函数介绍
2014/08/29 Python
python动态参数用法实例分析
2015/05/25 Python
python中嵌套函数的实操步骤
2019/02/27 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
python实现飞机大战项目
2020/03/11 Python
css3弹性盒子flex实现三栏布局的实现
2020/11/12 HTML / CSS
HTML5新增的表单元素和属性实例解析
2014/07/07 HTML / CSS
Falconeri美国官网:由羊绒和羊毛制成的针织服装
2018/04/08 全球购物
客户经理岗位职责
2013/12/08 职场文书
国贸专业个人求职信范文
2014/01/08 职场文书
《散步》教学反思
2014/03/02 职场文书
最新优秀教师个人先进事迹材料
2014/05/06 职场文书
企业承诺书怎么写
2014/05/24 职场文书
销售经理工作检讨书
2015/02/19 职场文书
2016教师年度考核评语大全
2015/12/01 职场文书
详解MySQL集群搭建
2021/05/26 MySQL
Spring boot实现上传文件到本地服务器
2022/08/14 Java/Android