将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模块学习 filecmp 文件比较
Aug 27 Python
python实现进程间通信简单实例
Jul 23 Python
Python制作数据导入导出工具
Jul 31 Python
Python批量更改文件名的实现方法
Oct 29 Python
python统计多维数组的行数和列数实例
Jun 23 Python
python RabbitMQ 使用详细介绍(小结)
Nov 08 Python
python开启debug模式的方法
Jun 27 Python
详细整理python 字符串(str)与列表(list)以及数组(array)之间的转换方法
Aug 30 Python
利用 PyCharm 实现本地代码和远端的实时同步功能
Mar 23 Python
pycharm的python_stubs问题
Apr 08 Python
Python devel安装失败问题解决方案
Jun 09 Python
浅谈keras中的目标函数和优化函数MSE用法
Jun 10 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中如何使用session实现保存用户登录信息
2015/10/20 PHP
CI框架数据库查询之join用法分析
2016/05/18 PHP
php微信公众账号开发之前五个坑(一)
2016/09/18 PHP
laravel 5.4中实现无限级分类的方法示例
2017/07/27 PHP
PHP实现基于栈的后缀表达式求值功能
2017/11/10 PHP
jquery 经典动画菜单效果代码
2010/01/26 Javascript
7款风格新颖的jQuery/CSS3菜单导航分享
2013/04/23 Javascript
JQuery 图片滚动轮播示例代码
2014/03/24 Javascript
JS解析XML实例分析
2015/01/30 Javascript
js时间戳格式化成日期格式的多种方法介绍
2017/02/16 Javascript
详解vue.js移动端配置flexible.js及注意事项
2019/04/10 Javascript
vue实现记事本功能
2019/06/26 Javascript
vue.js基于v-for实现批量渲染 Json数组对象列表数据示例
2019/08/03 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
微信小程序中插入激励视频广告并获取收益(实例代码)
2019/12/06 Javascript
vue-cli3项目配置eslint代码规范的完整步骤
2020/09/10 Javascript
Vue+Spring Boot简单用户登录(附Demo)
2020/11/12 Javascript
[03:00]《DAC最前线》之欧美新秀VS老将
2015/02/01 DOTA
Python Matplotlib库入门指南
2015/05/18 Python
详解Python安装scrapy的正确姿势
2018/06/26 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
Python3 获取一大段文本之间两个关键字之间的内容方法
2018/10/11 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Django Admin中增加导出CSV功能过程解析
2019/09/04 Python
Python特殊属性property原理及使用方法解析
2020/10/09 Python
python tkinter的消息框模块(messagebox,simpledialog)
2020/11/07 Python
Timberland法国官网:购买靴子、鞋子、衣服、夹克和配饰
2019/11/30 全球购物
个人查摆剖析材料
2014/02/04 职场文书
不拖欠农民工工资承诺书
2014/03/31 职场文书
金融系毕业生自荐书
2014/07/08 职场文书
博士生导师推荐信
2014/07/08 职场文书
关于环保的活动方案
2014/08/25 职场文书
建国大业观后感
2015/06/01 职场文书
2015年高三教学工作总结
2015/07/21 职场文书
Mac环境Nginx配置和访问本地静态资源的实现
2021/03/31 Servers
Python爬虫网络请求之代理服务器和动态Cookies
2022/04/12 Python