【pyqtgraph绘图】案例-动态的正余弦波形图

先看一个简单的小例子:

完整代码:

import numpy as np
import pyqtgraph as pg
import sys
from PyQt5.QtWidgets import QWidget,QApplication,QFrame,QGridLayout,QVBoxLayout

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
        self.generate_image()

    def initUI(self):
        self.setGeometry(200,200,1000,800)
        self.setWindowTitle("实时刷新正余弦波形图")
        self.gridLayout = QGridLayout(self)
        self.frame = QFrame(self)
        self.frame.setFrameShape(QFrame.Panel)
        self.frame.setFrameShadow(QFrame.Plain)
        self.frame.setLineWidth(2)
        self.frame.setStyleSheet("background-color:rgb(0,255,255);")
        self.gridLayout.addWidget(self.frame,0,0,1,2)
        self.setLayout(self.gridLayout)

    def generate_image(self):
        verticalLayout = QVBoxLayout(self.frame)
        win = pg.GraphicsLayoutWidget(self.frame)
        verticalLayout.addWidget(win)
        p = win.addPlot(title="动态波形图")
        p.showGrid(x=True,y=True)
        p.setLabel(axis="left",text="Amplitude / V")
        p.setLabel(axis="bottom",text="t / s")
        p.setTitle("y = sin(x)")
        p.addLegend()
        # mkpen(‘y‘, width=3, style=QtCore.Qt.DashLine)
        self.curve1 = p.plot(pen=pg.mkPen("r",width=2),name="y1")  #设置pen 格式
        self.Fs = 1024.0 #采样频率
        self.N = 1024    #采样点数
        self.f0 = 4.0    #信号频率
        self.pha = 0     #初始相位
        self.t = np.arange(self.N) / self.Fs    #时间向量 1*1024的矩阵
        self.curve1.setData(self.t, np.sin(8 * np.pi * self.t + self.pha * np.pi / 180.0))

if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

实时刷新正余弦波形的例子

下面举一个复杂一点的例子,这个例子在一个波形图上实时连续刷新两条曲线,分别为正弦曲线和余弦曲线,运行结果的动态图如下:

效果如下:

完整代码:

import numpy as np
import pyqtgraph as pg
import sys
from PyQt5.QtWidgets import QWidget,QApplication,QFrame,QGridLayout,QLabel,QPushButton,QVBoxLayout
from PyQt5.QtCore import Qt,QTimer

class Example(QWidget):

    def __init__(self):
        super(Example, self).__init__()
        self.initUI()
        self.generate_image()

    def initUI(self):
        self.setGeometry(200,200,1000,800)
        self.setWindowTitle("实时刷新正余弦波形图")
        self.gridLayout = QGridLayout(self)
        self.frame = QFrame(self)
        self.frame.setFrameShape(QFrame.Panel)
        self.frame.setFrameShadow(QFrame.Plain)
        self.frame.setLineWidth(2)
        self.frame.setStyleSheet("background-color:rgb(0,255,255);")
        self.label = QLabel(self)
        self.label.setText("正弦函数&余弦函数")
        self.label.setAlignment(Qt.AlignCenter)
        self.button = QPushButton(self)
        self.button.setText("生成波形图")
        self.button.clicked.connect(self.btnClick)
        self.gridLayout.addWidget(self.frame,0,0,1,2)
        self.gridLayout.addWidget(self.label,1,0,1,1)
        self.gridLayout.addWidget(self.button,1,1,1,1)

        self.setLayout(self.gridLayout)

    def generate_image(self):
        verticalLayout = QVBoxLayout(self.frame)
        win = pg.GraphicsLayoutWidget(self.frame)
        verticalLayout.addWidget(win)
        p = win.addPlot(title="动态波形图")
        p.showGrid(x=True,y=True)
        p.setLabel(axis="left",text="Amplitude / V")
        p.setLabel(axis="bottom",text="t / s")
        p.setTitle("y1 = sin(x)  y2 = cos(x)")
        p.addLegend()

        self.curve1 = p.plot(pen="r",name="y1")
        self.curve2 = p.plot(pen="g",name="y2")

        self.Fs = 1024.0 #采样频率
        self.N = 1024    #采样点数
        self.f0 = 4.0    #信号频率
        self.pha = 0     #初始相位
        self.t = np.arange(self.N) / self.Fs    #时间向量 1*1024的矩阵

    def plotData(self):
        self.pha += 10
        self.curve1.setData(self.t , np.sin(8 * np.pi  * self.t+ self.pha * np.pi/180.0))
        self.curve2.setData(self.t , np.cos(8 * np.pi  * self.t + self.pha * np.pi/180.0))

    def btnClick(self):
        self.button.setText("再次点击加速!")
        timer = QTimer(self)
        timer.timeout.connect(self.plotData)
        timer.start(100)

if __name__ == ‘__main__‘:
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
    sys.exit(app.exec_())

原文地址:https://www.cnblogs.com/XJT2018/p/10284832.html

时间: 2024-08-08 10:10:56

【pyqtgraph绘图】案例-动态的正余弦波形图的相关文章

正余弦信号的DFT频谱分析

一般的,对正余弦信号进行采样并DFT运算,画出频谱图,会发现频谱并不干净.这种现象称为频谱泄漏.因为DFT运算只能是有限序列,突然的截断产生了泄漏. 会有这样的特殊情况,当采样截取的刚好是整数个周期,则频谱图显得特别干净.可以理解为刚好取的完整周期,周期性明显了,频率就比较单一. 为此做了matlab实验: ts = 0.01;%采样率100Hz n = 0:N-1; y = sin(2*pi*20*n*ts);%20Hz信号,每周期采5个点 xk = abs(fft(y,N));%注意根据ff

CORDIC算法计算正余弦

网上有很多关于CORDIC算法的资料,看了之后觉得还是wikipedia讲述的更加清晰,特此总结+转载 http://en.wikipedia.org/wiki/CORDIC 算法思想 CORDIC算法是一种对目标值进行逼近的迭代算法,且迭代次数越多精度越高.迭代过程中仅仅需要除2运算和加减运算,因此特别适合硬件方式实现.在单位圆中,圆上角β点的x坐标和y坐标分别对应β的cos和sin值,因此,求角β的正弦值的CORDICn次迭代过程如下: 1.以(1,0)为初始点,向靠近β的方向旋转arcta

利用cordic 算法产生正/余弦波形

引言:本文旨在通过该算法产生正余弦波形(不使用IP核). 一.仿真波形 如上所示,dout_sin 和dout_cos 通过补码形式输出三角函数的值,其中使用dout_vld指示信号的有效性. 二.代码下载 点我下载,然后自己加入到modelsim中就可以仿真了. 信号说明: 如上所示,只要给din_vld 和din即可,din的范围是0 - 359. 三.推荐知识参考 参考资料 四.cordic的个人理解(待续) 原文地址:https://www.cnblogs.com/cofin/p/918

【pyqtgraph绘图】如何使用pyqtgraph

解读官方API-如何使用pyqtgraph 这里有一些使用pyqtgraph的建议方法: 从交互式shell(python -i,ipython等) 从应用程序显示弹出窗口 在PyQt应用程序中嵌入小部件 命令行使用 PyQtGraph使得从命令行可视化数据变得非常容易.注意: import pyqtgraph as pg pg.plot(data) # 数据可以是列表或numpy数组 上面的例子将打开一个窗口,显示给定数据的线图.调用  pg.plot返回创建的plot widget句柄,允许

【pyqtgraph绘图】线条,填充和颜色

解读官方API-线条,填充和颜色 参考: http://www.pyqtgraph.org/documentation/style.html 线条,填充和颜色 Qt依靠其QColor,QPen和QBrush类来为其所有绘图指定线条和填充样式. 在pyqtgraph中也使用相同的系统,但pyqtgraph也允许许多指定相同样式选项的简写方法. pyqtgraph中的许多函数和方法都接受指定线条样式(笔),填充样式(笔刷)或颜色的参数.对于大多数这些函数参数,可以使用以下值: 表示颜色的单字符字符(

Pandas数据处理+Matplotlib绘图案例

利用pandas对数据进行预处理然后再使用matplotlib对处理后的数据进行数据可视化是数据分析中常用的方法. 第一组例子(星巴克咖啡店) 假如我们现在有这样一组数据:星巴克在全球的咖啡店信息,如下图所示.数据来源:starbucks_store_locations. 店铺总数排名前10的国家 # coding=utf-8 # 统计店铺数排名前10的国家 import pandas as pd from matplotlib import pyplot as plt from matplot

【PyQt5】使用pyqtgraph绘图时UI卡顿的解决

思路是把所有数据处理计算的过程放在主线程之外的子线程内 问题,如果不对数据进行剪裁,长时间过后主线程内的绘图会消耗比较多的时间 from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5 import QtWidgets,QtGui,QtCore import pyqtgraph as pg import sys,os,random,time,psutil class

【pyqtgraph绘图】安装pyqtgraph

解读官方API-安装 安装 参考:http://www.pyqtgraph.org/documentation/installation.html 根据您的需要,有许多不同的方式来安装pyqtgraph,使用Python pip命令最简洁高效: pip install pyqtgraph 要访问最新的功能和错误修正,请从github复制pyqtgraph: git clone https://github.com/pyqtgraph/pyqtgraph 到github上下载源代码安装pyqtgr

【pyqtgraph绘图】Qt速成课程

解读官方API-Qt速成课程 参考:http://www.pyqtgraph.org/documentation/qtcrashcourse.html Qt速成课程 PyQtGraph广泛使用Qt来生成几乎所有的可视化输出和接口.Qt的文档编写得非常好,我们鼓励所有pyqtgraph开发人员熟悉它. 本节的目的是介绍使用Qt(使用PyQt或PySide)为pyqtgraph开发人员编程. QWidgets和布局 Qt GUI几乎总是由几个基本组件组成: 一个窗口.这通常由QMainWindow提