将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实现端口转发器的方法
Mar 13 Python
Python实现扫描局域网活动ip(扫描在线电脑)
Apr 28 Python
django模型层(model)进行建表、查询与删除的基础教程
Nov 21 Python
python得到一个excel的全部sheet标签值方法
Dec 10 Python
python 检查是否为中文字符串的方法
Dec 28 Python
利用Python绘制Jazz网络图的例子
Nov 21 Python
Python lxml模块的基本使用方法分析
Dec 21 Python
TensorFlow实现自定义Op方式
Feb 04 Python
Python多线程获取返回值代码实例
Feb 17 Python
Python基于read(size)方法读取超大文件
Mar 12 Python
如何利用Python识别图片中的文字
May 31 Python
matplotlib交互式数据光标实现(mplcursors)
Jan 13 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
JS(jQuery)实现聊天接收到消息语言自动提醒功能详解【提示“您有新的消息请注意查收”】
2019/04/16 PHP
PHP7 list() 函数修改
2021/03/09 PHP
JS 面向对象之神奇的prototype
2011/02/26 Javascript
jQuery实现表单步骤流程导航代码分享
2015/08/28 Javascript
JavaScript中关联原型链属性特性
2016/02/13 Javascript
jQuery获取file控件中图片的宽高与大小
2016/08/04 Javascript
JavaScript重定向URL参数的两种方法小结
2016/10/19 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
vue2实现可复用的轮播图carousel组件详解
2017/11/27 Javascript
vue 纯js监听滚动条到底部的实例讲解
2018/09/03 Javascript
详解如何运行vue项目
2019/04/15 Javascript
Vue Autocomplete 自动完成功能简单示例
2019/05/25 Javascript
layer.open的自适应及居中及子页面标题的修改方法
2019/09/05 Javascript
layui在form表单页面通过Validform加入简单验证的方法
2019/09/06 Javascript
javascript移动端 电子书 翻页效果实现代码
2019/09/07 Javascript
JavaScript实现图片上传并预览并提交ajax
2019/09/30 Javascript
Vue+tracking.js 实现前端人脸检测功能
2020/04/16 Javascript
使用Python对Excel进行读写操作
2017/03/30 Python
python的unittest测试类代码实例
2017/12/07 Python
python 对dataframe下面的值进行大规模赋值方法
2018/06/09 Python
Python3+django2.0+apache2+ubuntu14部署网站上线的方法
2018/07/07 Python
python实时获取外部程序输出结果的方法
2019/01/12 Python
python通过对字典的排序,对json字段进行排序的实例
2020/02/27 Python
使用 Python 遍历目录树的方法
2020/02/29 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
python+adb命令实现自动刷视频脚本案例
2020/04/23 Python
OpenCV图片漫画效果的实现示例
2020/08/18 Python
施华洛世奇英国官网:SWAROVSKI英国
2017/03/13 全球购物
俄罗斯玩具、儿童用品、儿童服装和鞋子网上商店:MyToys.ru
2019/10/14 全球购物
俄罗斯隐形眼镜和眼镜在线商店:Cronos
2020/06/02 全球购物
Big Green Smile法国:领先的英国有机和天然产品在线商店
2021/01/02 全球购物
留学自荐信的技巧
2013/10/17 职场文书
院领导写的就业推荐信
2014/03/09 职场文书
sqlserver2017共享功能目录路径不可改的解决方法
2021/04/16 SQL Server
SpringBoot整合Mybatis Generator自动生成代码
2021/08/23 Java/Android
微信小程序APP的事件绑定以及传递参数时的冒泡和捕获
2022/04/19 Javascript