将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实现的根据文件名查找数据文件功能示例
May 02 Python
使用Python编写Prometheus监控的方法
Oct 15 Python
python如何实现数据的线性拟合
Jul 19 Python
使用python制作一个解压缩软件
Nov 13 Python
使用python的turtle绘画滑稽脸实例
Nov 21 Python
根据tensor的名字获取变量的值方式
Jan 04 Python
pytorch 实现在预训练模型的 input上增减通道
Jan 06 Python
Python基于类路径字符串获取静态属性
Mar 12 Python
python小白切忌乱用表达式
May 29 Python
详解pyqt5的UI中嵌入matplotlib图形并实时刷新(挖坑和填坑)
Aug 07 Python
Python函数递归调用实现原理实例解析
Aug 11 Python
python获取linux系统信息的三种方法
Oct 14 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中绘制图像的一些函数总结
2014/11/19 PHP
PHP的Yii框架的常用日志操作总结
2015/12/08 PHP
thinkphp jquery实现图片上传和预览效果
2020/07/22 PHP
php简单读取.vcf格式文件的方法示例
2017/09/02 PHP
?牟┛途W扣了一??效果出?? target=
2007/05/27 Javascript
select组合框option的捕捉实例代码
2008/09/30 Javascript
Ext第一周 史上最强学习笔记---GridPanel(基础篇)
2008/12/29 Javascript
Javascript Function对象扩展之延时执行函数
2010/07/06 Javascript
IE6下js通过css隐藏select的一个bug
2010/08/16 Javascript
AJAX异步从优酷专辑中采集所有视频及信息(JavaScript代码)
2010/11/20 Javascript
jquery实现鼠标滑过小图查看大图的方法
2015/07/20 Javascript
JS实现不使用图片仿Windows右键菜单效果代码
2015/10/22 Javascript
AngularJS基础 ng-dblclick 指令用法
2016/08/01 Javascript
使用 Vue.js 仿百度搜索框的实例代码
2017/05/09 Javascript
JS实现商品筛选功能
2020/08/19 Javascript
Vue二次封装axios为插件使用详解
2018/05/21 Javascript
解决vue.js 数据渲染成功仍报错的问题
2018/08/25 Javascript
Node.js assert断言原理与用法分析
2019/01/04 Javascript
简述vue-cli中chainWebpack的使用方法
2019/07/30 Javascript
vue中对象数组去重的实现
2020/02/06 Javascript
python字典的常用操作方法小结
2016/05/16 Python
打包发布Python模块的方法详解
2016/09/18 Python
对pandas的行列名更改与数据选择详解
2018/11/12 Python
python批量获取html内body内容的实例
2019/01/02 Python
使用python爬取微博数据打造一颗“心”
2019/06/28 Python
Python爬虫爬取、解析数据操作示例
2020/03/27 Python
python操作toml文件的示例代码
2020/11/27 Python
解决PyCharm无法使用lxml库的问题(图解)
2020/12/22 Python
Yahoo-PHP面试题2
2014/12/06 面试题
Yahoo-PHP面试题4
2012/05/05 面试题
服务行业个人求职的自我评价
2013/12/12 职场文书
经费申请报告
2015/05/15 职场文书
2015年企业员工工作总结范文
2015/05/21 职场文书
客户答谢会致辞
2015/07/30 职场文书
OpenCV-Python实现怀旧滤镜与连环画滤镜
2021/06/09 Python
C#连接ORACLE出现乱码问题的解决方法
2021/10/05 Oracle