matplotlib嵌入到pyqt中
在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中相关推荐
- wxpython使用matplot_测试怎么将MatPlotLib嵌入到wxPython中
展开全部 # -*- coding: utf-8 -*- ####################################################################### ...
- pyqtgraph文档笔记(三)pyqtgraph嵌入到PyQt
pyqtgraph可以单独运行,也可以嵌入到PyQt中交互.要嵌入到PyQt, 需要生成 pyqtgraph.PlotWidget,然后就可以像正常的Qt Widget 一样添加使用,如添加到layo ...
- python爬网络图片脚步_关于python:如何从本地计算机或网络资源将图像或图片嵌入jupyter笔记本中?...
我想将图像包括在Jupyter笔记本中. 如果执行以下操作,则可以正常工作: from IPython.display import Image Image("img/picture.png ...
- python读取数据文件、并把里面的数据变成x的二维坐标_python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法...
python 使用matplotlib 实现从文件中读取x,y坐标的可视化方法 1. test.txt文件,数据以逗号分割,第一个数据为x坐标,第二个为y坐标,数据如下:1.1,2 2.1,2 3.1 ...
- Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation)
Python可视化(matplotlib)在图像中添加文本和标记(Text and Annotation) 目录 Python可视化(matplotlib)在图形中添加文本和标记(Text and A ...
- Qt/PyQt中使用系统全局的快捷键
Qt/PyQt中使用系统全局的快捷键 除了全局快捷键部分外,其他的都比较简单,都是我实现"onekeycodehighlighter"中碰到的一些小问题,这里顺面整理一下.事实上, ...
- python在坐标轴上画矩形_Python使用matplotlib实现在坐标系中画一个矩形的方法
本文实例讲述了Python使用matplotlib实现在坐标系中画一个矩形的方法.分享给大家供大家参考.具体实现方法如下: import matplotlib.pyplot as plt from m ...
- 百度搜索引擎提供了一段嵌入到页面中的代码
百度搜索引擎提供了一段嵌入到页面中的代码 <form action="http://www.baidu.com/baidu" target="_blank" ...
- 把控制台程序嵌入到 WinForm 中执行
我们经常有一些用控制台实现的简单应用,这种应用一般都是一步一步"向导"式执行,在每一步上收集用户的输入,最后得到程序执行的结果.但有些用户可能不喜欢用键盘操作的命令行界面,还是愿意 ...
最新文章
- BPM实例分享:如何设置表单字体样式
- linux下大于2TB硬盘格式化及挂载,linux下大于2T的分区方法
- 操作系统(十三)处理机调度的概念、层次
- linux - svn命令操作使用随笔svn import
- LeetCode 88. 合并两个有序数组 golang
- Java 9 正式发布,终落地 Jigsaw 项目
- 百度运维部电子竞技大赛!
- Leetcode 931.下降路径最小和
- lamp环境搭建之配置apache与fpm方式的php
- mysql源码安装linux,Linux下mysql源码安装笔记
- web使用js调用摄像头扫码、拍照、录像
- html怎么隐藏音频的图标,XP系统realtek高清晰音频管理器图标如何隐藏
- Android 百度翻译API(详细步骤+源码)
- 全国社会媒体处理大会即将召开,一文详解四天议程精华
- 【Python】批量修改照片日期
- Service层需要接口吗
- mac address 的一些操作
- 微信小程序云开发基础版也开始收费了
- python绘图房子_matplotlib画房子
- 展会结束了,BIM建模助手将继续努力