将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 文件与目录操作
Dec 24 Python
用Python脚本来删除指定容量以上的文件的教程
May 04 Python
Python随机读取文件实现实例
May 25 Python
Python实现的概率分布运算操作示例
Aug 14 Python
Django实现组合搜索的方法示例
Jan 23 Python
python文件和文件夹复制函数
Feb 07 Python
Django实现前台上传并显示图片功能
May 29 Python
部署Django到阿里云服务器教程示例
Jun 03 Python
Python使用socketServer包搭建简易服务器过程详解
Jun 12 Python
Django REST 异常处理详解
Jul 15 Python
python中return不返回值的问题解析
Jul 22 Python
python如何利用cv2模块读取显示保存图片
Jun 04 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
PHP5 安装方法
2006/10/09 PHP
同台服务器使用缓存APC效率高于Memcached的演示代码
2010/02/16 PHP
字母顺序颠倒而单词顺序不变的php代码
2010/08/08 PHP
joomla数据库操作示例代码
2016/01/06 PHP
PHP获取网页所有连接的方法(附demo源码下载)
2016/03/30 PHP
php通过文件头判断格式的方法
2016/05/28 PHP
PHP观察者模式实例分析【对比JS观察者模式】
2019/05/22 PHP
php对mongodb的扩展(小试牛刀)
2012/11/11 Javascript
基于JavaScript实现继承机制之调用call()与apply()的方法详解
2013/05/07 Javascript
YUI模块开发原理详解
2013/11/18 Javascript
jQuery中.live()方法的用法深入解析
2013/12/30 Javascript
js中settimeout方法加参数
2014/02/28 Javascript
javascript获取隐藏元素(display:none)的高度和宽度的方法
2014/06/06 Javascript
jQuery实现鼠标滑向当前图片高亮显示并且其它图片变灰的方法
2015/07/27 Javascript
javascript中Date对象应用之简易日历实现
2016/07/12 Javascript
基于JavaScript实现购物车功能
2017/02/07 Javascript
最全的JavaScript开发工具列表 总有一款适合你
2017/06/29 Javascript
Vue axios 中提交表单数据(含上传文件)
2017/07/06 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
2019/09/27 Javascript
使用pyecharts无法import Bar的解决方案
2020/04/23 Python
pandas分别写入excel的不同sheet方法
2018/12/11 Python
python绘制雪景图
2019/12/16 Python
简单了解pytest测试框架setup和tearDown
2020/04/14 Python
python连接mysql数据库并读取数据的实现
2020/09/25 Python
python 如何停止一个死循环的线程
2020/11/24 Python
python 爬取百度文库并下载(免费文章限定)
2020/12/04 Python
Giuseppe Zanotti美国官方网站:将鞋履视为高级时装般精心制作
2018/02/06 全球购物
Sisley法国希思黎中国官网:享誉全球的奢华植物美容品牌
2019/06/30 全球购物
中学生运动会口号
2014/06/07 职场文书
群众路线批评与自我批评发言稿
2014/10/16 职场文书
考勤制度通知
2015/04/25 职场文书
统招统分证明
2015/06/23 职场文书
干部培训简讯
2015/07/20 职场文书
班主任工作经验交流会总结
2015/11/02 职场文书
创业计划书之游泳馆
2019/09/16 职场文书
mysql 生成连续日期及变量赋值
2022/03/20 MySQL