示例詳解pyqtgraph繪制實(shí)時(shí)更新數(shù)據(jù)的圖
PyQtGraph是一個(gè)基于PyQt和NumPy的Python庫,它專為實(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) # 更新曲線數(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)建一條黃色的線
# 數(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毫秒更新一次
# 開始事件循環(huán)
QtGui.QApplication.instance().exec_()運(yùn)行效果截圖如下:

到此這篇關(guān)于pyqtgraph繪制實(shí)時(shí)更新數(shù)據(jù)的圖的文章就介紹到這了,更多相關(guān)pyqtgraph實(shí)時(shí)更新內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python用zip函數(shù)同時(shí)遍歷多個(gè)迭代器示例詳解
這篇文章主要給大家進(jìn)行介紹了Python如何用zip函數(shù)同時(shí)遍歷多個(gè)迭代器,文中給出了示例以及原理和注意事項(xiàng),相信會(huì)對大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧。2016-11-11
Python時(shí)間獲取及轉(zhuǎn)換知識(shí)匯總
這篇文章主要介紹了Python時(shí)間獲取及轉(zhuǎn)換知識(shí)匯總的相關(guān)資料,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友可以參考下2017-01-01
Python中pygame的mouse鼠標(biāo)事件用法實(shí)例
這篇文章主要介紹了Python中pygame的mouse鼠標(biāo)事件用法,以完整實(shí)例形式詳細(xì)分析了pygame響應(yīng)鼠標(biāo)事件的相關(guān)技巧,具有一定參考借鑒價(jià)值,需要的朋友可以參考下2015-11-11
Python?Arrow實(shí)現(xiàn)優(yōu)雅處理日期與時(shí)間的終極指南
Arrow?是一個(gè)強(qiáng)大的?Python?庫,專門設(shè)計(jì)用于簡化日期和時(shí)間處理,它提供了比?Python?標(biāo)準(zhǔn)庫?datetime?更直觀,更人性化的?API,下面我們就來看看它的具體使用吧2025-06-06
淺談SciPy中的optimize.minimize實(shí)現(xiàn)受限優(yōu)化問題
今天小編就為大家分享一篇淺談SciPy中的optimize.minimize實(shí)現(xiàn)受限優(yōu)化問題,具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-02-02
python使用difflib實(shí)現(xiàn)自動(dòng)查重
Python中有許多現(xiàn)成的庫和工具,可以方便地實(shí)現(xiàn)自動(dòng)查重的功能,其中,difflib庫就是一個(gè)專門用于比較文件和字符串差異的庫,下面我們就來看看如何利用difflib實(shí)現(xiàn)自動(dòng)查重吧2023-11-11
Python本地搭建靜態(tài)Web服務(wù)器的實(shí)現(xiàn)
本文主要介紹了Python本地搭建靜態(tài)Web服務(wù)器的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-02-02

