摘要:坐標軸,標題,標簽,圖形樣式餅圖,柱狀圖,折線圖等等等的設置都通過的成員函數(shù)來設置完成。寫在最后因為自身能力有限,也不是科班出身,都是自學的,目前還是一名學生,所以有未盡之處還請指正,不喜勿噴。
在pyqt5中使用matplotlib 前言
雖然,qt中也提供了繪圖函數(shù),但對于初學者并不是很容易掌握,眾所周知,matplot提供了簡單,易用,強大的繪圖函數(shù),結合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 Figure progname = os.path.basename(sys.argv[0]) progversion = "0.1" class MyMplCanvas(FigureCanvas): # 這既是一個wiget類也是一個FigureCanva def __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): pass class 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 Nielsen This 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成員,生成一個繪圖類,并由其創(chuàng)建一個繪圖布局,返回一個self.axes來管理繪圖布局中的內(nèi)容。坐標軸,標題,標簽,圖形樣式(餅圖,柱狀圖,折線圖等)等等的設置都通過self.axes的成員函數(shù)來設置完成。剛開始的使用還是比較云里霧里的,現(xiàn)在就差不多了。我對官方例程做了些修改,具體的代碼,可以到我的GitHub倉儲上查看Qt-learn-pyqt5-matplotlib里面也有一些其他的例子,應該還會不定期的更新,有興趣也可以看看。下面只需要對這幾個類進行實例話,開啟qt的事件循環(huán)就可以看到界面了,具體的可以看我的github代碼,這里就不多說了。
寫在最后因為自身能力有限,也不是科班出身,都是自學的,目前還是一名學生,所以有未盡之處還請指正,不喜勿噴。謝謝。
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42400.html
摘要:庫可以完成圖像歸檔和圖形處理兩方面功能需求。是一個強大的圖像和視頻工作庫。它提供了多種程序接口,支持跨平臺包括移動端應用。除了對圖像進行基本處理外,還支持圖像數(shù)據(jù)建模,并預制了多種圖像識別引擎,如人臉識別。計算機視覺工具包 #整理一下各種第三方庫的大體分類,考計算機py二級的可能會用...
摘要:本文作為學習過程中對一些常用知識點的整理,方便查找。所有繪圖操作僅對當前圖和當前坐標有效。表示把圖標分割成的網(wǎng)格。每個對象都是一個擁有自己坐標系統(tǒng)的繪圖區(qū)域。避免比例壓縮為橢圓數(shù)據(jù)可視化入門教程繪圖核心剖析如何調(diào)整子圖的大小 本文作為學習過程中對matplotlib一些常用知識點的整理,方便查找。 強烈推薦ipython無論你工作在什么項目上,IPython都是值得推薦的。利用ipyt...
摘要:簡介同一樣,也是進行數(shù)據(jù)可視化分析的重要第三方包。的五種繪圖風格有五種的風格,它們分別是。 作者:xiaoyu微信公眾號:Python數(shù)據(jù)科學知乎:python數(shù)據(jù)分析師 最近在做幾個項目的數(shù)據(jù)分析,每次用到seaborn進行可視化繪圖的時候總是忘記具體操作。雖然seaborn的官方網(wǎng)站已經(jīng)詳細的介紹了使用方法,但是畢竟是英文,而且查找不是很方便。因此博主想從零開始將seaborn學...
閱讀 3679·2021-11-16 11:41
閱讀 2886·2021-09-23 11:45
閱讀 692·2019-08-30 15:44
閱讀 543·2019-08-30 13:10
閱讀 1964·2019-08-30 12:49
閱讀 3533·2019-08-28 17:51
閱讀 1479·2019-08-26 12:20
閱讀 705·2019-08-23 17:56