摘要:坐標(biāo)軸,標(biāo)題,標(biāo)簽,圖形樣式餅圖,柱狀圖,折線圖等等等的設(shè)置都通過(guò)的成員函數(shù)來(lái)設(shè)置完成。寫(xiě)在最后因?yàn)樽陨砟芰τ邢?,也不是科班出身,都是自學(xué)的,目前還是一名學(xué)生,所以有未盡之處還請(qǐng)指正,不喜勿噴。
在pyqt5中使用matplotlib 前言
雖然,qt中也提供了繪圖函數(shù),但對(duì)于初學(xué)者并不是很容易掌握,眾所周知,matplot提供了簡(jiǎn)單,易用,強(qiáng)大的繪圖函數(shù),結(jié)合mumpy基本可以達(dá)到matlb中的繪圖體驗(yàn),并且比matlab更加具有擴(kuò)展性,也更自由。通過(guò)matplotlib提供的官方例程的修改,就可以很容易的繪制你想要的圖形,真的很強(qiáng)大。(我也是名初學(xué)者)
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): # 這既是一個(gè)wiget類也是一個(gè)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""")代碼解析
通過(guò)matplotlib.use("Qt5Agg"),這行代碼聲明matplotlib將要嵌入到pyqt5中,同樣通過(guò)這句,也可以聲明將matplotlib嵌入到其他的,gui界面中去,然后通過(guò)繼承FigureCanvas類來(lái)獲得一個(gè)即使widget的類也是FigureCanva類的類,然后通過(guò)self.fig成員,生成一個(gè)繪圖類,并由其創(chuàng)建一個(gè)繪圖布局,返回一個(gè)self.axes來(lái)管理繪圖布局中的內(nèi)容。坐標(biāo)軸,標(biāo)題,標(biāo)簽,圖形樣式(餅圖,柱狀圖,折線圖等)等等的設(shè)置都通過(guò)self.axes的成員函數(shù)來(lái)設(shè)置完成。剛開(kāi)始的使用還是比較云里霧里的,現(xiàn)在就差不多了。我對(duì)官方例程做了些修改,具體的代碼,可以到我的GitHub倉(cāng)儲(chǔ)上查看Qt-learn-pyqt5-matplotlib里面也有一些其他的例子,應(yīng)該還會(huì)不定期的更新,有興趣也可以看看。下面只需要對(duì)這幾個(gè)類進(jìn)行實(shí)例話,開(kāi)啟qt的事件循環(huán)就可以看到界面了,具體的可以看我的github代碼,這里就不多說(shuō)了。
寫(xiě)在最后因?yàn)樽陨砟芰τ邢蓿膊皇强瓢喑錾?,都是自學(xué)的,目前還是一名學(xué)生,所以有未盡之處還請(qǐng)指正,不喜勿噴。謝謝。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.hztianpu.com/yun/42400.html
摘要:庫(kù)可以完成圖像歸檔和圖形處理兩方面功能需求。是一個(gè)強(qiáng)大的圖像和視頻工作庫(kù)。它提供了多種程序接口,支持跨平臺(tái)包括移動(dòng)端應(yīng)用。除了對(duì)圖像進(jìn)行基本處理外,還支持圖像數(shù)據(jù)建模,并預(yù)制了多種圖像識(shí)別引擎,如人臉識(shí)別。計(jì)算機(jī)視覺(jué)工具包 #整理一下各種第三方庫(kù)的大體分類,考計(jì)算機(jī)py二級(jí)的可能會(huì)用...
摘要:本文作為學(xué)習(xí)過(guò)程中對(duì)一些常用知識(shí)點(diǎn)的整理,方便查找。所有繪圖操作僅對(duì)當(dāng)前圖和當(dāng)前坐標(biāo)有效。表示把圖標(biāo)分割成的網(wǎng)格。每個(gè)對(duì)象都是一個(gè)擁有自己坐標(biāo)系統(tǒng)的繪圖區(qū)域。避免比例壓縮為橢圓數(shù)據(jù)可視化入門(mén)教程繪圖核心剖析如何調(diào)整子圖的大小 本文作為學(xué)習(xí)過(guò)程中對(duì)matplotlib一些常用知識(shí)點(diǎn)的整理,方便查找。 強(qiáng)烈推薦ipython無(wú)論你工作在什么項(xiàng)目上,IPython都是值得推薦的。利用ipyt...
摘要:簡(jiǎn)介同一樣,也是進(jìn)行數(shù)據(jù)可視化分析的重要第三方包。的五種繪圖風(fēng)格有五種的風(fēng)格,它們分別是。 作者:xiaoyu微信公眾號(hào):Python數(shù)據(jù)科學(xué)知乎:python數(shù)據(jù)分析師 最近在做幾個(gè)項(xiàng)目的數(shù)據(jù)分析,每次用到seaborn進(jìn)行可視化繪圖的時(shí)候總是忘記具體操作。雖然seaborn的官方網(wǎng)站已經(jīng)詳細(xì)的介紹了使用方法,但是畢竟是英文,而且查找不是很方便。因此博主想從零開(kāi)始將seaborn學(xué)...
閱讀 3745·2021-11-16 11:41
閱讀 2957·2021-09-23 11:45
閱讀 747·2019-08-30 15:44
閱讀 630·2019-08-30 13:10
閱讀 2008·2019-08-30 12:49
閱讀 3590·2019-08-28 17:51
閱讀 1560·2019-08-26 12:20
閱讀 762·2019-08-23 17:56