在pyqt5中使用matplotlib

前言

虽然,qt中也提供了绘图函数,但对于初学者并不是很容易掌握,众所周知,matplot提供了简单,易用,强大的绘图函数,结合mumpy基本可以达到matlb中的绘图体验,并且比matlab更加具有扩展性,也更自由。通过matplotlib提供的官方例程的修改,就可以很容易的绘制你想要的图形,真的很强大。(我也是名初学者)

matplotlib,pyqt5官方例程

# 取自matplotlib 官方文档案例from __future__ import unicode_literals
import sys
import os
import random
import matplotlib
# Make sure that we are using QT5
matplotlib.use('Qt5Agg')from PyQt5 import QtCore, QtWidgets
from numpy import arange, sin, pi, linspace
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figureprogname = os.path.basename(sys.argv[0])
progversion = "0.1"class MyMplCanvas(FigureCanvas):# 这既是一个wiget类也是一个FigureCanvadef __init__(self, parent=None, width=5, height=4, dpi=100):self.fig = Figure(figsize=(width, height), dpi=dpi)self.axes = self.fig.add_subplot(111)self.compute_initial_figure()FigureCanvas.__init__(self, self.fig)self.setParent(parent)FigureCanvas.setSizePolicy(self,QtWidgets.QSizePolicy.Expanding,QtWidgets.QSizePolicy.Expanding)FigureCanvas.updateGeometry(self)def compute_initial_figure(self):passclass MyStaticMplCanvas(MyMplCanvas):"""Simple canvas with a sine plot."""def __init__(self, *args, **kwargs):MyMplCanvas.__init__(self, *args, **kwargs)def compute_initial_figure(self):print("hello world")x = linspace(0, 2 * pi, 500000)y = sin(x)self.axes.cla()self.axes.plot(x, y)self.draw()class MyDynamicMplCanvas(MyMplCanvas):"""A canvas that updates itself every second with a new plot."""def __init__(self, *args, **kwargs):MyMplCanvas.__init__(self, *args, **kwargs)timer = QtCore.QTimer(self)timer.timeout.connect(self.update_figure)timer.start(1000)def compute_initial_figure(self):self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')def update_figure(self):# Build a list of 4 random integers between 0 and 10 (both inclusive)l = [random.randint(0, 10) for i in range(4)]self.axes.cla()self.axes.plot([0, 1, 2, 3], l, 'r')self.draw()class ApplicationWindow(QtWidgets.QMainWindow):def __init__(self):QtWidgets.QMainWindow.__init__(self)self.setAttribute(QtCore.Qt.WA_DeleteOnClose)self.setWindowTitle("application main window")self.file_menu = QtWidgets.QMenu('&File', self)self.file_menu.addAction('&Quit', self.fileQuit,QtCore.Qt.CTRL + QtCore.Qt.Key_Q)self.menuBar().addMenu(self.file_menu)self.help_menu = QtWidgets.QMenu('&Help', self)self.menuBar().addSeparator()self.menuBar().addMenu(self.help_menu)self.help_menu.addAction('&About', self.about)self.main_widget = QtWidgets.QWidget(self)l = QtWidgets.QVBoxLayout(self.main_widget)sc = MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100)dc = MyDynamicMplCanvas(self.main_widget, width=5, height=4, dpi=100)l.addWidget(sc)l.addWidget(dc)self.main_widget.setFocus()self.setCentralWidget(self.main_widget)self.statusBar().showMessage("All hail matplotlib!", 2000)def fileQuit(self):self.close()def closeEvent(self, ce):self.fileQuit()def about(self):QtWidgets.QMessageBox.about(self, "About","""embedding_in_qt5.py example
Copyright 2005 Florent Rougon, 2006 Darren Dale, 2015 Jens H NielsenThis program is a simple example of a Qt5 application embedding matplotlib
canvases.It may be used and modified with no restriction; raw copies as well as
modified versions may be distributed without limitation.This is modified from the embedding in qt4 example to show the difference
between qt4 and qt5""")

代码解析

通过matplotlib.use('Qt5Agg'),这行代码声明matplotlib将要嵌入到pyqt5中,同样通过这句,也可以声明将matplotlib嵌入到其他的,gui界面中去,然后通过继承FigureCanvas类来获得一个即使widget的类也是FigureCanva类的类,然后通过self.fig成员,生成一个绘图类,并由其创建一个绘图布局,返回一个self.axes来管理绘图布局中的内容。坐标轴,标题,标签,图形样式(饼图,柱状图,折线图等)等等的设置都通过self.axes的成员函数来设置完成。刚开始的使用还是比较云里雾里的,现在就差不多了。我对官方例程做了些修改,具体的代码,可以到我的GitHub仓储上查看Qt-learn-pyqt5-matplotlib里面也有一些其他的例子,应该还会不定期的更新,有兴趣也可以看看。下面只需要对这几个类进行实例话,开启qt的事件循环就可以看到界面了,具体的可以看我的github代码,这里就不多说了。

写在最后

因为自身能力有限,也不是科班出身,都是自学的,目前还是一名学生,所以有未尽之处还请指正,不喜勿喷。谢谢。

matplotlib嵌入到pyqt中相关推荐

  1. wxpython使用matplot_测试怎么将MatPlotLib嵌入到wxPython中

    展开全部 # -*- coding: utf-8 -*- ####################################################################### ...

  2. pyqtgraph文档笔记(三)pyqtgraph嵌入到PyQt

    pyqtgraph可以单独运行,也可以嵌入到PyQt中交互.要嵌入到PyQt, 需要生成 pyqtgraph.PlotWidget,然后就可以像正常的Qt Widget 一样添加使用,如添加到layo ...

  3. python爬网络图片脚步_关于python:如何从本地计算机或网络资源将图像或图片嵌入jupyter笔记本中?...

    我想将图像包括在Jupyter笔记本中. 如果执行以下操作,则可以正常工作: from IPython.display import Image Image("img/picture.png ...

  4. python读取数据文件、并把里面的数据变成x的二维坐标_python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法...

    python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法 1. test.txt文件,数据以逗号分割,第一个数据为x坐标,第二个为y坐标,数据如下:1.1,2 2.1,2 3.1 ...

  5. Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation)

    Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation) 目录 Python可视化(matplotlib)在图形中添加文本和标记(Text and A ...

  6. Qt/PyQt中使用系统全局的快捷键

    Qt/PyQt中使用系统全局的快捷键 除了全局快捷键部分外,其他的都比较简单,都是我实现"onekeycodehighlighter"中碰到的一些小问题,这里顺面整理一下.事实上, ...

  7. python在坐标轴上画矩形_Python使用matplotlib实现在坐标系中画一个矩形的方法

    本文实例讲述了Python使用matplotlib实现在坐标系中画一个矩形的方法.分享给大家供大家参考.具体实现方法如下: import matplotlib.pyplot as plt from m ...

  8. 百度搜索引擎提供了一段嵌入到页面中的代码

    百度搜索引擎提供了一段嵌入到页面中的代码 <form action="http://www.baidu.com/baidu" target="_blank" ...

  9. 把控制台程序嵌入到 WinForm 中执行

    我们经常有一些用控制台实现的简单应用,这种应用一般都是一步一步"向导"式执行,在每一步上收集用户的输入,最后得到程序执行的结果.但有些用户可能不喜欢用键盘操作的命令行界面,还是愿意 ...

最新文章

  1. BPM实例分享:如何设置表单字体样式
  2. linux下大于2TB硬盘格式化及挂载,linux下大于2T的分区方法
  3. 操作系统(十三)处理机调度的概念、层次
  4. linux - svn命令操作使用随笔svn import
  5. LeetCode 88. 合并两个有序数组 golang
  6. Java 9 正式发布,终落地 Jigsaw 项目
  7. 百度运维部电子竞技大赛!
  8. Leetcode 931.下降路径最小和
  9. lamp环境搭建之配置apache与fpm方式的php
  10. mysql源码安装linux,Linux下mysql源码安装笔记
  11. web使用js调用摄像头扫码、拍照、录像
  12. html怎么隐藏音频的图标,XP系统realtek高清晰音频管理器图标如何隐藏
  13. Android 百度翻译API(详细步骤+源码)
  14. 全国社会媒体处理大会即将召开,一文详解四天议程精华
  15. 【Python】批量修改照片日期
  16. Service层需要接口吗
  17. mac address 的一些操作
  18. 微信小程序云开发基础版也开始收费了
  19. python绘图房子_matplotlib画房子
  20. 展会结束了,BIM建模助手将继续努力

热门文章

  1. linux下的线程属性
  2. mybaits十七:使用foreach标签
  3. jsp页面遍历后台传递的对象
  4. 6、Gerrit插件
  5. [编程技巧] 巧用CPU缓存优化代码:数组 vs. 链表
  6. VCSA中配置时间和时区,实测至6.5适用
  7. prototype原型模式
  8. Android Studio 一些方便使用的设置
  9. 十六款值得关注的NoSQL与NewSQL数据库--转载
  10. UVA 11578 - Situp Benches(dp)