PyQt5 Matplotib绘图-实时

import sys
import time
from datetime import datetime
import numpy as np
from PyQt5.QtWidgets import QVBoxLayout, QWidget, QApplication
from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FC
from PyQt5.QtCore import QThread, pyqtSignal
from matplotlib import pyplot as plt


timeX = []
class Matplotib(QWidget):
    def __init__(self):
        super(Matplotib, self).__init__()
        self.initData()

    def initData(self):
        self.resize(1300, 800)
        plt.rcParams['font.sans-serif'] = ['SimHei']
        plt.rcParams['axes.unicode_minus'] = False
        # 设置画布部分
        self.fig = plt.figure()
        self.myCanvas = FC(self.fig)
        # 设置布局,将组件添加到布局中
        self.layout = QVBoxLayout()
        self.layout.addWidget(self.myCanvas)
        self.setLayout(self.layout)
        # 创建线程并连接信号
        self.myThread = MyThread()
        self.myThread.update_data.connect(self.updateData)
        self.myThread.start()

    def updateData(self):
         timeX.append(datetime.now().strftime('%H:%M:%S'))
         dataY1 = self.myThread.dataY1
         dataY2 = self.myThread.dataY2
         plt.cla()  # 清空画布
         plt.title('啥也不是折线图', fontsize=12)
         plt.plot(timeX,dataY1,label='啥啥啥')
         plt.plot(timeX, dataY2, label='是是是')
         plt.xlabel('时间')
         plt.ylabel('数值')
         if len(timeX) > 6:
             timeN = int(len(timeX) / 6)
             if len(timeX) % 6 > 0:
                 timeN = int(len(timeX) / 6) + 1
             plt.xticks(timeX[::timeN])
         plt.legend()
         self.myCanvas.draw()


class MyThread(QThread):
    update_data = pyqtSignal()

    def __init__(self, parent=None):
        super(MyThread, self).__init__(parent)
        self.dataY1 = []
        self.dataY2 = []

    def run(self):
        while True:
            self.dataY1.append(np.random.random())
            self.dataY2.append(0.5)
            self.update_data.emit() # 发送更新信号
            time.sleep(1)# 线程暂停1秒


if __name__ == '__main__':
    app = QApplication(sys.argv)
    m = Matplotib()
    m.show()
    sys.exit(app.exec_())

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: PyQt5是一个为python提供图形用户界面库,而Matplotlib是一个python 2D绘图库。两者可以结合使用,通过PyQt5创建图形用户界面,在界面上使用Matplotlib进行动态绘图。 为了在PyQt5中使用Matplotlib,需要安装PyQt5和Matplotlib包,并使用Matplotlib的pyplot模块和PyQt5QtWidgets模块。 代码示例如下: ``` 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 进行动态绘图时,我们可以通过 PyQt5QTimer 以及 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的动态绘图技术是非常重要的一种技术手段。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CN.LG

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值