Matplotlib在PyQt4的應用

来源:http://www.cnblogs.com/wangzhehong1981/archive/2016/06/26/5618914.html
-Advertisement-
Play Games

Matplotlib作為Python中著名的數據可視化工具,其官網也提供了在PyQt4中使用的源碼,這裡舉一個應用實例,以備不時之需。 1) 利用Qt Designer創建GUI界面 Demo的GUI界面,如圖1所示,其中利用QFrame作為放置Matplotlib界面的容器。然後調用pyuic4. ...


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 np
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from ui_maindialog import Ui_MainDialog
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas # Matplotlib對PyQt4的支持
from matplotlib.figure import Figure

class 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) # 四周Margin 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按鍵後界面

 

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 使用VS2015進行C++開發的6個主要原因 使用Visual Studio 2015進行C++開發 在今天的 Build 大會上,進行了“將你的 C++ 代碼轉移至 VS2015 的 6 個原因”的演講,其中探討了 VS2015 中對於 C++ 開發者們更有用的新功能。自從它在 2015 年七月的 ...
  • C#——類 一、String 類 系統內置的處理字元串類型的函數方法類。方便我們對字元串類型進行一系列的處理。 1、Length:獲取字元串的長度,返回一個int類型的值 string x=Console.ReadLine();//小string是大String的快捷方式 int i = x.Len ...
  • 一、前言: 最近做一個簡單的線上升級Demo,使用了微軟較早的.Net Remoting技術來練手。 簡單的思路就是在伺服器配置一個Remoting對象,然後在客戶端來執行Remoting對象中的方法。 過程: (1) 讀取本地dll文件的名稱與版本號,與伺服器的進行對比 (2) 確認需要升級的文件 ...
  • Ext.Net版本:4.1.0 Ext.Net官網:ext.net Ext.Net官方演示:mvc.ext.net Ext.Net MVC Example 下載:github.com/extnet/Ext.NET.Examples.MVC Ext.Net Nuget 地址:www.nuget.org ...
  • 這次是對2.0的小修補,2.0交互幾乎沒有,這次添加了進度條,和文本框,同時由於取得的鏈接主要會出現錯誤是:webResponse錯誤。 針對這種情況,設置了 截取錯誤信息,這裡我們不處理,後續直接判定statecode屬性來決定是否還要執行下麵的程式。 另外一點變化就是以前是通過將所獲取的網頁存到 ...
  • 環境:vs2013+web api 2 問題:預設情況下新建的Web Api 2項目,自帶的Help頁下會顯示Api的相關信息,但Description那一欄無法獲取到數據,如下圖所示: 解決: 1.先啟用輸出的XML文檔文件: 在web api項目上右擊->屬性,在屬性頁"生成"標簽下,勾選輸出下 ...
  • 為什麼要有內部類?都有哪些內部類?它們都適合用在什麼場景?內部類最後都會轉換為獨立的類,它們是如何轉換的?為什麼內部類可以訪問外部類的私有變數和方法?為什麼方法內部類可以訪問方法參數?但參數又為什麼必須要聲明為final? ... ...
  • 目錄 前言 1 不使用開發工具 1.1 自動重啟工具 1.2 瀏覽器自動刷新工具 2 阻塞event loop 3 頻繁調用回調函數 4 聖誕樹結構的回調(回調的地獄) 5 創建一個大而完整的應用程式 6 缺少日誌 7 沒有測試 8 不使用靜態分析工具 9 沒有監視與性能分析 10 使用consol ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...