最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Pyqt+matplotlib 實(shí)現(xiàn)實(shí)時(shí)畫(huà)圖案例

 更新時(shí)間:2021年03月09日 11:08:57   作者:蘇格拉倒  
這篇文章主要介紹了Pyqt+matplotlib 實(shí)現(xiàn)實(shí)時(shí)畫(huà)圖案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

需求分析:

項(xiàng)目中根據(jù)測(cè)得的數(shù)據(jù)在界面上實(shí)時(shí)繪制

運(yùn)行環(huán)境:

Python 3.7 + Matplotlib 3.0.2 + PyQt 5

matplot官網(wǎng)給的相應(yīng)的例子:

import sys
import time
import numpy as np
from matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5
if is_pyqt5():
  from matplotlib.backends.backend_qt5agg import (
    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
else:
  from matplotlib.backends.backend_qt4agg import (
    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
class ApplicationWindow(QtWidgets.QMainWindow):
  def __init__(self):
    super().__init__()
    self._main = QtWidgets.QWidget()
    self.setCentralWidget(self._main)
    layout = QtWidgets.QVBoxLayout(self._main)
    static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
    layout.addWidget(static_canvas)
    self.addToolBar(NavigationToolbar(static_canvas, self))
    dynamic_canvas = FigureCanvas(Figure(figsize=(5, 3)))
    layout.addWidget(dynamic_canvas)
    self.addToolBar(QtCore.Qt.BottomToolBarArea,
            NavigationToolbar(dynamic_canvas, self))
    self._static_ax = static_canvas.figure.subplots()
    t = np.linspace(0, 10, 501)
    self._static_ax.plot(t, np.tan(t), ".")
    self._dynamic_ax = dynamic_canvas.figure.subplots()
    self._timer = dynamic_canvas.new_timer(
      100, [(self._update_canvas, (), {})])
    self._timer.start()
  def _update_canvas(self):
    self._dynamic_ax.clear()
    t = np.linspace(0, 10, 101)
    # Shift the sinusoid as a function of time.
    self._dynamic_ax.plot(t, np.sin(t + time.time()))
    self._dynamic_ax.figure.canvas.draw()
if __name__ == "__main__":
  qapp = QtWidgets.QApplication(sys.argv)
  app = ApplicationWindow()
  app.show()
  qapp.exec_()

上圖中的散點(diǎn)為靜止的,下面的圖為動(dòng)態(tài)的,類似行波,一直在行走,是應(yīng)為用了**self._dynamic_ax.plot(t, np.sin(t + time.time()))**函數(shù),但是這個(gè)和我想得實(shí)時(shí)畫(huà)圖不太一樣,在項(xiàng)目中要根據(jù)生成的數(shù)據(jù)實(shí)時(shí)繪圖,因此x軸的元素和y軸的元素個(gè)數(shù)是逐漸增加的。

通過(guò)閱讀上述 _update_canvas 函數(shù)代碼以及 dynamic_canvas.new_timer 可以使得每次調(diào)用_update_canvas是的相應(yīng)的x的元素和y軸的元素增加更改后的代碼如下:

import sys
import time
import numpy as np
from matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5
if is_pyqt5():
  from matplotlib.backends.backend_qt5agg import (
    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
else:
  from matplotlib.backends.backend_qt4agg import (
    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)
from matplotlib.figure import Figure
class ApplicationWindow(QtWidgets.QMainWindow):
  def __init__(self):
    super().__init__()
    self._main = QtWidgets.QWidget()
    self.setCentralWidget(self._main)
    layout = QtWidgets.QVBoxLayout(self._main)
    static_canvas = FigureCanvas(Figure(figsize=(5, 3)))
    layout.addWidget(static_canvas)
    self.addToolBar(NavigationToolbar(static_canvas, self))
    dynamic_canvas = FigureCanvas(Figure(figsize=(5, 3)))
    layout.addWidget(dynamic_canvas)
    self.addToolBar(QtCore.Qt.BottomToolBarArea,
            NavigationToolbar(dynamic_canvas, self))
    self._static_ax = static_canvas.figure.subplots()
    t = np.linspace(0, 10, 501)
    self._static_ax.plot(t, np.tan(t), ".")
    self.x = [] #建立空的x軸數(shù)組和y軸數(shù)組
    self.y = []
    self.n = 0
    self._dynamic_ax = dynamic_canvas.figure.subplots()
    self._timer = dynamic_canvas.new_timer(
      100, [(self._update_canvas, (), {})])
    self._timer.start()
    
  def _update_canvas(self):
    self.n += 1
    if self.n == 200:      #畫(huà)200個(gè)點(diǎn)就停止,根據(jù)實(shí)際情況確定終止條件
      self._timer.stop()   
    self._dynamic_ax.clear()
    self.x.append(np.pi/100*self.n) #x加入一個(gè)值,后一個(gè)值比前一個(gè)大pi/100
    xx = np.array(self.x)
    # t = np.linspace(0, 10, 101)
    # Shift the sinusoid as a function of time.
    self._dynamic_ax.plot(xx, np.sin(xx))
    self._dynamic_ax.set_xlim(0,7)
    self._dynamic_ax.set_ylim(-1,1)
    self._dynamic_ax.figure.canvas.draw()
if __name__ == "__main__":
  qapp = QtWidgets.QApplication(sys.argv)
  app = ApplicationWindow()
  app.show()
  qapp.exec_()

上面的圖仍然靜止,下面的可以實(shí)時(shí)顯示

補(bǔ)充:pyqtgraph實(shí)時(shí)繪圖出現(xiàn)無(wú)法刷新問(wèn)題

pyqtgraph實(shí)時(shí)繪圖時(shí),會(huì)概率出現(xiàn)無(wú)法實(shí)時(shí)刷新繪制圖,原因是

while True:
  ......
  update()  # 通過(guò) plotitem.setData()更新數(shù)據(jù)
  ......

這里使用的是while循環(huán),不斷的更新數(shù)據(jù)概率出現(xiàn)繪圖不刷新和操作不響應(yīng)(最小化操作會(huì)高概率出現(xiàn)該問(wèn)題)

解決方法1:

我使用的是PlotWidget,remove后再addwidget,然后再重新繪制

解決方法2:

不使用while循環(huán),使用QTime定時(shí)器

t = QTimer()
t.timeout.connect(self.update)
t.start(10)

兩種方法都可以解決這個(gè)問(wèn)題,推薦方法2

據(jù)說(shuō)使用while循環(huán),需要在更新數(shù)據(jù)之后調(diào)用pg.QtGui.QApplication.processEvents()才能確保正常,這個(gè)本人試了不行,可能是我這邊的原因吧

以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。

相關(guān)文章

  • python3 發(fā)送任意文件郵件的實(shí)例

    python3 發(fā)送任意文件郵件的實(shí)例

    下面小編就為大家分享一篇python3 發(fā)送任意文件郵件的實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-01-01
  • django-rest-framework 自定義swagger過(guò)程詳解

    django-rest-framework 自定義swagger過(guò)程詳解

    這篇文章主要介紹了django-rest-framework 自定義swagger過(guò)程詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • python編寫(xiě)softmax函數(shù)、交叉熵函數(shù)實(shí)例

    python編寫(xiě)softmax函數(shù)、交叉熵函數(shù)實(shí)例

    這篇文章主要介紹了python編寫(xiě)softmax函數(shù)、交叉熵函數(shù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-06-06
  • Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn)

    Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn)

    這篇文章主要介紹了Python JSON格式數(shù)據(jù)的提取和保存的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2019-03-03
  • 一文教你利用Python畫(huà)花樣圖

    一文教你利用Python畫(huà)花樣圖

    這篇文章主要給大家介紹了關(guān)于如何利用Python畫(huà)花樣圖的相關(guān)資料,文中通過(guò)示例代碼以及圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2021-10-10
  • python中entry用法講解

    python中entry用法講解

    在本篇文章里小編給大家整理的是一篇關(guān)于python中entry用法講解內(nèi)容,有興趣的朋友們可以學(xué)習(xí)參考下。
    2020-12-12
  • Python?sklearn?中的?make_blobs()?函數(shù)示例詳解

    Python?sklearn?中的?make_blobs()?函數(shù)示例詳解

    make_blobs()?是?sklearn.datasets中的一個(gè)函數(shù),這篇文章主要介紹了Python?sklearn?中的?make_blobs()?函數(shù),本文結(jié)合實(shí)例代碼給大家介紹的非常詳細(xì),需要的朋友可以參考下
    2023-02-02
  • 利用Python破解驗(yàn)證碼實(shí)例詳解

    利用Python破解驗(yàn)證碼實(shí)例詳解

    這篇文章主要給大家介紹的是如何通過(guò)一個(gè)簡(jiǎn)單的例子來(lái)實(shí)現(xiàn)破解驗(yàn)證碼。從本文中我們可以學(xué)習(xí)到 Python 基本知識(shí),PIL 模塊的使用,破解驗(yàn)證碼的原理。文中通過(guò)實(shí)例一步步介紹的很詳細(xì),相信對(duì)大家理解和學(xué)習(xí)具有一定的參考借鑒價(jià)值,有需要的朋友們下面來(lái)一起看看吧。
    2016-12-12
  • Python threading.local代碼實(shí)例及原理解析

    Python threading.local代碼實(shí)例及原理解析

    這篇文章主要介紹了Python threading.local代碼實(shí)例及原理解析,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python學(xué)習(xí)筆記之調(diào)用eval函數(shù)出現(xiàn)invalid syntax錯(cuò)誤問(wèn)題

    python學(xué)習(xí)筆記之調(diào)用eval函數(shù)出現(xiàn)invalid syntax錯(cuò)誤問(wèn)題

    python是一門多種用途的編程語(yǔ)言,時(shí)常扮演腳本語(yǔ)言的角色。一般來(lái)說(shuō),python可以定義為面向?qū)ο蟮哪_本語(yǔ)言,這個(gè)定義把面向?qū)ο蟮闹С趾兔嫦蚰_本語(yǔ)言的角色融合在一起。很多時(shí)候,人們常常喜歡用“腳本”和不是語(yǔ)言來(lái)描述python的代碼文件。
    2015-10-10

最新評(píng)論

邢台县| 鄯善县| 南陵县| 库尔勒市| 泸定县| 黑河市| 丰台区| 郎溪县| 抚顺县| 夏河县| 开平市| 嘉定区| 彝良县| 绥棱县| 揭阳市| 方正县| 防城港市| 富锦市| 景德镇市| 温泉县| 永春县| 万盛区| 广宗县| 盐山县| 梁山县| 江安县| 义乌市| 茂名市| 泌阳县| 宜君县| 馆陶县| 巢湖市| 深州市| 玉屏| 尤溪县| 登封市| 荣昌县| 旬邑县| 六枝特区| 潞西市| 图木舒克市|