pyqt5 动态曲线绘图 面向过程的方式

在数据处理过程当中,经常需要实时显示某些数据,尤其是在应用软件设计过程中,Qt是一个很好的方式。在这里利用pyqt5展示一个面向过程编程的例子,展示实际工程中如何利用pyQT 绘制动态曲线。

面向过程的编程方法的一般过程如下

#1. 导入包与模块
#2. 创建一个应用程序
#3. 创建窗口以及控件
#4. 进入消息循环

 

按照这个思路进行编程,程序如下图所示

import sys,time
from PyQt5.QtWidgets import QApplication,QMainWindow,QGridLayout
from PyQt5 import QtCore, QtGui, QtWidgets

import numpy as np
from matplotlib.lines import Line2D

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
##################
from PyQt5.QtCore import QTimer


def PrepareSamples(wyz_sam):
    wyz_sam.x = np.arange(-4, 4, 0.02)
    wyz_sam.y = np.arange(-4, 4, 0.02)
    wyz_sam.X, wyz_sam.Y = np.meshgrid(wyz_sam.x, wyz_sam.y)
    wyz_sam.z = np.sin(wyz_sam.x)
    wyz_sam.R = np.sqrt(wyz_sam.X ** 2 + wyz_sam.Y ** 2)
    wyz_sam.Z = np.sin(wyz_sam.R)
    return wyz_sam


def UpdateImgs():
    dt=time.time()-ts
    #print(dt)
    z=np.sin(wyz_samples.x+dt)
    line.set_ydata(z)
    figure_Qt.draw()
    
#2. 创建一个立应用程序
app = QApplication(sys.argv)

#3. 创建窗口与控件
##3.1 创建主窗口,名字为suide
mainwindow  = QMainWindow()
mainwindow.resize(400,400)
##3.2 创建QGroupBox控件,名字为区域
plotarea = QtWidgets.QGroupBox(mainwindow)#创建绘图区域控件,为主窗口的子窗口
plotarea.setGeometry(QtCore.QRect(100, 50, 591, 361))
plotarea.setObjectName("groupBox")


##3.3 创建画板:首先建立matplotlib中的FIgure,然后利用FigureCanvasQTAgg将其转换为窗体对象
####该部分完成Figure_Canves
width=3.9
height=2.7
figure_wyz = Figure(figsize=(width,height),dpi=100)
figure_Qt = FigureCanvas(figure_wyz)
figure_Qt.ax=figure_wyz.add_subplot(111)
#huaban.setParent(quyu)####将Figure 渲染成的QWidget窗体设置为QGroupBox的子窗口

#######改部分完成prepareFIgureCanves

LineFigureLayout = QGridLayout(plotarea)
LineFigureLayout.addWidget(figure_Qt)

figure_Qt.ax.set_xlim(-4, 4)
figure_Qt.ax.set_ylim(-2, 2)

wyz_samples = PrepareSamples(mainwindow)
line = Line2D(wyz_samples.x,wyz_samples.z)
figure_Qt.ax.add_line(line)

#4. 进入消息循环
#此处采用计时器进行循环,按时更新曲线对象,完成动态图形的绘制

timer=QTimer()
timer.start(1)
ts=time.time()
timer.timeout.connect(UpdateImgs)

 

mainwindow.show()

sys.exit(app.exec_())
 

 

程序运行结果为:

  • 5
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: PyQt5是一个为python提供图形用户界面库,而Matplotlib是一个python 2D绘图库。两者可以结合使用,通过PyQt5创建图形用户界面,在界面上使用Matplotlib进行动态绘图。 为了在PyQt5中使用Matplotlib,需要安装PyQt5和Matplotlib包,并使用Matplotlib的pyplot模块和PyQt5的QtWidgets模块。 代码示例如下: ``` from PyQt5 import QtWidgets from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas from matplotlib.figure import Figure class MyMplCanvas(FigureCanvas): def __init__(self, parent=None, width=5, height=4, dpi=100): fig = Figure(figsize=(width, height), dpi=dpi) self.axes = fig.add_subplot(111) FigureCanvas.__init__(self, fig) self.setParent(parent) FigureCanvas.setSizePolicy(self, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding) FigureCanvas.updateGeometry(self) class MyDynamicMplCanvas(MyMplCanvas): def __init__(self, *args, **kwargs): MyMplCanvas.__init__(self, *args, **kwargs) timer = QtCore.QTimer(self) timer.timeout.connect(self.update_figure) timer.start(1000) def update_figure(self): pass ``` 这个例子中MyDynamicMplCanvas是一个用于动态绘图的类。通过使用QtCore.QTimer,每秒调用update_figure函数。update_figure函数可以被重写以实现具体的绘图操作。 ### 回答2: PyQt5 是一个 Python 编写的图形界面开发工具包。而 Matplotlib 是用于 Python 编程语言及其数值数学扩展库 NumPy 的绘图库。它提供了数据绘制、数据可视化等强大的功能,能够生成各种类型的图形,并支持动态绘图。 在使用 PyQt5 和 Matplotlib 进行动态绘图时,我们可以通过 PyQt5 的 QTimer 以及 Matplotlib 的 FigureCanvas 实现动态更新图形。过程如下: 1. 创建一个带有绘图区域的 PyQt5 窗口,并在窗口中添加 Matplotlib 绘制的图形。 2. 初始化 Matplotlib 绘图中的数据,并将数据与图形绑定。初始化数据的方法可以通过 Matplotlib 中的 Artist 对象来实现,例如使用 Line2D 对象进行初始化,同时使用 pyplot 对象对绘图进行布局和风格设置。 3. 使用 QTimer 定时器来触发 Matplotlib 动态更新图形。在定时器的槽函数中,更新绘图数据并重新绘制 Matplotlib 画布。 因为 PyQt5 和 Matplotlib 本身都是非常强大的工具,因此在动态绘图时,我们也可以通过一系列的操作来优化绘图的效果,比如设置动画效果、优化绘图速度、调整绘图样式等。 总之,PyQt5 和 Matplotlib 都是非常适合进行动态绘图的工具,通过它们,我们可以轻松地实现绘制各种精美动态图形的需求。 ### 回答3: pyqt5Python编程语言的一个GUI(图形用户界面)框架,而matplotlib是一个强大的绘图库,这两个库可结合使用,用于动态绘图动态绘图是一种让图像在一定时间内进行变换的绘图方式,通过动态绘图,能够展现出数据变化的趋势和规律,因此在数据分析和可视化中使用非常广泛。 在使用pyqt5和matplotlib实现动态绘图时,主要需要进行以下几个步骤: 1. 创建主窗口,设置布局。在pyqt5中,可以创建一个QMainWindow或者QDialog类的窗口作为主窗口,通过设置布局可以将matplotlib的绘图区域嵌入到窗口中。 2. 创建matplotlib figure和axes对象。通过创建figure和axes对象,可以绘制各种图像,比如折线图,条形图,散点图等。 3. 实时更新绘图数据并重绘图像。通过更新figure和axes对象的数据,可以实现图像的实时更新,并将图像重绘到绘图区域中。 4. 添加交互功能。在pyqt5中,可以通过添加交互功能,比如按钮、滑动条或者输入框等,来实现对数据的操作,从而实现实时更新绘图数据的目的。 总之,pyqt5和matplotlib结合起来实现动态绘图,不仅能让数据在可视化时更为直观和清晰,也能为用户提供交互功能,使得用户能够更加深入地了解数据所反映的现象,并进行分析和预测。因此,在数据分析和可视化领域,pyqt5和matplotlib的动态绘图技术是非常重要的一种技术手段。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值