示例詳解pyqtgraph繪制實(shí)時(shí)更新數(shù)據(jù)的圖
PyQtGraph是一個(gè)基于PyQt和NumPy的Python庫(kù),它專(zhuān)為實(shí)時(shí)數(shù)據(jù)可視化而設(shè)計(jì)。以繪制0~2π范圍的y=sin(x)為例,基本用法的代碼如下:
# coding=utf-8 import pyqtgraph as pg from pyqtgraph.Qt import QtGui, QtCore import numpy as np # pyqtgraph中的顏色表示,blue:b,green:g,red:r,cyan:c,magenta:m,yellow:y,black:k,white:w # pyqtgraph中的顏色表示也可用十六進(jìn)制,如白色'#FFFFFF' # 字體大小的單位有px(pixel,像素)和pt(point,點(diǎn)),px適用于屏幕顯示,其大小是動(dòng)態(tài)的,而pt適用于印刷,大小是固定的。 def update(): global x, y y = np.roll(y, -1) # 滾動(dòng)數(shù)組,模擬數(shù)據(jù)更新 curve.setData(x, y) # 更新曲線(xiàn)數(shù)據(jù) def mouseover(pos): global win act_pos = curve.mapFromScene(pos) if type(act_pos) != QtCore.QPointF: return # print(act_pos.x(), act_pos.y()) win.setWindowTitle("(x = {:.4f}, y = {:.4f})".format(act_pos.x(), act_pos.y())) if __name__ == '__main__': # 創(chuàng)建應(yīng)用 app = QtGui.QApplication([]) # 設(shè)置窗口界面屬性 win = pg.GraphicsLayoutWidget(show=True, title="實(shí)時(shí)數(shù)據(jù)更新示例") # 設(shè)置程序界面的標(biāo)題 win.resize(800, 600) # 設(shè)置程序界面的窗口大小 # win.setBackground("b") # 設(shè)置背景顏色為藍(lán)色。默認(rèn)背景是黑色,background='default' # 添加繪圖區(qū)域 plot = win.addPlot(title="實(shí)時(shí)更新的正弦波形") # 設(shè)置繪圖的標(biāo)題 plot.showGrid(x=True, y=True) # x軸和y軸都顯示網(wǎng)格 x_styles = {'color': 'r', 'font-size': '30px', 'units': 'radian'} # 設(shè)置標(biāo)簽文字、顏色、字體大小、單位 y_styles = {'color': 'r', 'font-size': '30px'} # 設(shè)置標(biāo)簽文字、顏色、字體大小 plot.setLabel('left', 'y=sin(x)', **y_styles) # 左邊坐標(biāo)軸,Y軸 plot.setLabel('bottom', 'x', **x_styles) # 下邊坐標(biāo)軸,X軸 plot.getAxis('left').setPen('#0000FF') # 坐標(biāo)軸上色 plot.getAxis('bottom').setPen('#0000FF') # 坐標(biāo)軸上色 plot.setXRange(min=0, max=7) # 設(shè)置X軸刻度范圍 plot.setYRange(min=-1.2, max=1.2) # 設(shè)置Y軸刻度范圍 plot.setMouseEnabled(x=False, y=False) # 設(shè)置禁用鼠標(biāo)交互,默認(rèn)是啟用的 curve = plot.plot(pen="y") # 創(chuàng)建一條黃色的線(xiàn) # 數(shù)據(jù)初始化 x = np.linspace(0, 2 * np.pi, 500) y = np.sin(x) # 綁定鼠標(biāo)移動(dòng)的信號(hào)和槽, 移動(dòng)鼠標(biāo)時(shí)就在窗口標(biāo)題上顯示當(dāng)前鼠標(biāo)停留位置的坐標(biāo) curve.scene().sigMouseMoved.connect(mouseover) # 設(shè)置定時(shí)器,每20毫秒更新一次,相當(dāng)于FPS=50 timer = QtCore.QTimer() timer.timeout.connect(update) timer.start(20) # 每20毫秒更新一次 # 開(kāi)始事件循環(huán) QtGui.QApplication.instance().exec_()
運(yùn)行效果截圖如下:
到此這篇關(guān)于pyqtgraph繪制實(shí)時(shí)更新數(shù)據(jù)的圖的文章就介紹到這了,更多相關(guān)pyqtgraph實(shí)時(shí)更新內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python中Wxpython實(shí)現(xiàn)剪切、復(fù)制、粘貼和文件打開(kāi)示例
我們?cè)赑ython開(kāi)發(fā)中中,可以使用WxPython庫(kù)來(lái)創(chuàng)建GUI應(yīng)用程序,并實(shí)現(xiàn)剪切、復(fù)制、粘貼和文件打開(kāi)功能,本文就來(lái)介紹一下,感興趣的可以了解一下2024-03-03Opencv實(shí)現(xiàn)計(jì)算兩條直線(xiàn)或線(xiàn)段角度方法詳解
這篇文章主要介紹了Opencv實(shí)現(xiàn)計(jì)算兩條直線(xiàn)或線(xiàn)段角度方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧2022-12-12詳解Django中的ifequal和ifnotequal標(biāo)簽使用
這篇文章主要介紹了詳解Django中的ifequal和ifnotequal標(biāo)簽使用,Django是重多高人氣Python框架中最為著名的一個(gè),需要的朋友可以參考下2015-07-07python web框架Flask實(shí)現(xiàn)圖形驗(yàn)證碼及驗(yàn)證碼的動(dòng)態(tài)刷新實(shí)例
在本篇文章里小編給大家整理的是關(guān)于python web框架Flask實(shí)現(xiàn)圖形驗(yàn)證碼的相關(guān)知識(shí)點(diǎn),有需要的朋友們參考下。2019-10-10淺談Python生成器generator之next和send的運(yùn)行流程(詳解)
下面小編就為大家?guī)?lái)一篇淺談Python生成器generator之next和send的運(yùn)行流程(詳解)。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-05-05python存儲(chǔ)16bit和32bit圖像的實(shí)例
今天小編就為大家分享一篇python存儲(chǔ)16bit和32bit圖像的實(shí)例,具有的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-12-12Python+Opencv實(shí)現(xiàn)計(jì)算閉合區(qū)域面積
這篇文章主要介紹了利用Python?Opencv計(jì)算閉合區(qū)域的面積的原理以及實(shí)現(xiàn)代碼,文中的講解詳細(xì)易懂,感興趣的小伙伴快跟隨小編一起學(xué)習(xí)一下吧2022-03-03