博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在PyQt4中使用matplotlib
阅读量:7019 次
发布时间:2019-06-28

本文共 3489 字,大约阅读时间需要 11 分钟。

matplotlib作为Python中著名的数据可视化工具,其官网也提供了在PyQt4中使用的源码,这里举一个应用实例,以备不时之需。

1) 利用Qt Designer创建GUI界面

Demo的GUI界面,如图1所示,其中利用QFrame作为放置matplotlib界面的容器。然后调用pyuic4.bat -o ui_maindialog.py maindialog.ui编译UI界面。

GUI设计界面

图1 GUI设计界面

2) maindialog.py程序代码

#!/usr/bin/env python#-*- coding: utf-8 -*-import numpy as npfrom PyQt4.QtCore import *from PyQt4.QtGui import *from ui_maindialog import Ui_MainDialogfrom matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas # matplotlib对PyQt4的支持from matplotlib.figure import Figureclass MainDialog(QDialog, Ui_MainDialog):    def __init__(self, parent=None):        super(MainDialog, self).__init__(parent)        self.setupUi(self)        self._createFigures()        self._createLayouts()   # 创建matplotlib的画布    def _createFigures(self):        self._fig = Figure(figsize=(8, 6), dpi=100, tight_layout=True)         self._fig.set_facecolor("#F5F5F5") # 背景色        self._fig.subplots_adjust(left=0.08, top=0.92, right=0.95, bottom=0.1) # Margins        self._canvas = FigureCanvas(self._fig) # 画布        self._ax = self._fig.add_subplot(111) # 增加subplot        self._ax.hold(True)        self._initializeFigure()    def _createLayouts(self):        layout = QHBoxLayout(self.frame)        layout.setContentsMargins(0, 0, 0, 0)        layout.addWidget(self._canvas) # Add Matplotli    def _initializeFigure(self):        Font = {
'family': 'Tahoma', 'weight': 'bold', 'size': 10} # Abscissa self._ax.set_xlim([380, 780]) self._ax.set_xticks([380, 460, 540, 620, 700, 780]) self._ax.set_xticklabels([380, 460, 540, 620, 700, 780], fontdict=Font) self._ax.set_xlabel("Wavelength (nm)", fontdict=Font) # Ordinate self._ax.set_ylim([0.0, 1.0]) self._ax.set_yticks(np.arange(0.0, 1.1, 0.2)) self._ax.set_yticklabels(np.arange(0.0, 1.1, 0.2), fontdict=Font) self._ax.set_ylabel("Spectral Radiance (W/(m$^2$*sr*nm))", fontdict=Font) self._ax.grid(True) # Grid On def _updateFigures(self): Font = {
'family': 'Tahoma', 'weight': 'bold', 'size': 10} self._ax.clear() maxY = 0.0 x = np.arange(380, 781) y = np.random.rand(401) self._ax.plot(x, y, 'r', label="Data")      maxY = max(y) if maxY <= 0: self._initializeFigure() else: self._fig.subplots_adjust(left=0.11, top=0.92, right=0.95, bottom=0.1) # Abscissa self._ax.set_xlim([380, 780]) self._ax.set_xticks([380, 460, 540, 620, 700, 780]) self._ax.set_xticklabels([380, 460, 540, 620, 700, 780], fontdict=Font) self._ax.set_xlabel("Wavelength (nm)", fontdict=Font) # Ordinate self._ax.set_ylim([0.0, maxY]) self._ax.set_yticks([0.0, maxY / 4.0, maxY / 2.0, maxY * 3 / 4.0, maxY]) self._ax.set_yticklabels( ["%.1e" % 0.0, "%.1e" % (maxY / 4.0), "%.1e" % (maxY / 2.0), "%.1e" % (maxY * 3.0 / 4.0), "%.1e" % maxY], fontdict=Font) self._ax.set_ylabel("Spectral Radiance (W/(m$^2$*sr*nm))", fontdict=Font) self._ax.grid(True) self._ax.legend(loc="best", fontsize="small").draggable(state=True) # Legend self._canvas.draw() @pyqtSlot() def on_plotPushButton_clicked(self): self._updateFigures()

初始界面如图2所示:

图2 GUI初始界面

3) 点击plot按键后

界面显示见图3:

 

图3 点击Plot按键后界面

 

 

转载于:https://www.cnblogs.com/wangzhehong1981/p/5618914.html

你可能感兴趣的文章
PROS Step:只需几分钟即可创建优化的价目表,并发现即时收益机会。
查看>>
mysql mysqld.sock文件丢失问题
查看>>
android 简单列表对话框(AlertDialog.Builder().setItems())
查看>>
JAVA基本语义简介
查看>>
输入框背景不失真的方法(自己用到过的)
查看>>
接口的显示实现
查看>>
[POI2007]Zap
查看>>
mysql5.6以上(适用5.7)免安装版本 终极配置
查看>>
前端基础面试题
查看>>
机器学习十大算法(一)
查看>>
海市蜃楼(2016-04-20 15:11:44)
查看>>
[AngularJS] tips技巧收集
查看>>
工程名 显示红色叹号
查看>>
SQL Server 调优系列进阶篇 - 如何维护数据库索引
查看>>
需要总结的知道
查看>>
「视频直播技术详解」系列之四:推流和传输
查看>>
微信小程序之快速接入七牛云
查看>>
cursor.MySQLCursorDict Class
查看>>
一行代码实现java list去重
查看>>
《zw版·Halcon-delphi系列原创教程》 Halcon分类函数008,matrix,矩阵函数
查看>>