返回顶部
首页 > 资讯 > 精选 >怎么在Pyqt中使用matplotlib实时画图案
  • 116
分享到

怎么在Pyqt中使用matplotlib实时画图案

2023-06-08 00:06:14 116人浏览 八月长安
摘要

怎么在PyQt中使用matplotlib实时画图案?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。运行环境:python 3.7 + Matplotlib 3.0

怎么在PyQt中使用matplotlib实时画图案?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。

运行环境:

python 3.7 + Matplotlib 3.0.2 + PyQt 5

matplot官网给的相应的例子:

import sysimport timeimport numpy as npfrom matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5if is_pyqt5():  from matplotlib.backends.backend_qt5agg import (    Figurecanvas, NavigationToolbar2QT as NavigationToolbar)else:  from matplotlib.backends.backend_qt4agg import (    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)from matplotlib.figure import Figureclass ApplicationWindow(QtWidgets.QMainWindow):  def __init__(self):    super().__init__()    self._main = QtWidgets.QWidget()    self.setCentralWidget(self._main)    layout = QtWidgets.QVBoxLayout(self._main)    static_canvas = FigureCanvas(Figure(figsize=(5, 3)))    layout.addWidget(static_canvas)    self.addToolBar(NavigationToolbar(static_canvas, self))    dynamic_canvas = FigureCanvas(Figure(figsize=(5, 3)))    layout.addWidget(dynamic_canvas)    self.addToolBar(QtCore.Qt.BottomToolBarArea,            NavigationToolbar(dynamic_canvas, self))    self._static_ax = static_canvas.figure.subplots()    t = np.linspace(0, 10, 501)    self._static_ax.plot(t, np.tan(t), ".")    self._dynamic_ax = dynamic_canvas.figure.subplots()    self._timer = dynamic_canvas.new_timer(      100, [(self._update_canvas, (), {})])    self._timer.start()  def _update_canvas(self):    self._dynamic_ax.clear()    t = np.linspace(0, 10, 101)    # Shift the sinusoid as a function of time.    self._dynamic_ax.plot(t, np.sin(t + time.time()))    self._dynamic_ax.figure.canvas.draw()if __name__ == "__main__":  qapp = QtWidgets.QApplication(sys.argv)  app = ApplicationWindow()  app.show()  qapp.exec_()

怎么在Pyqt中使用matplotlib实时画图案

上图中的散点为静止的,下面的图为动态的,类似行波,一直在行走,是应为用了**self._dynamic_ax.plot(t, np.sin(t + time.time()))**函数,但是这个和我想得实时画图不太一样,在项目中要根据生成的数据实时绘图,因此x轴的元素和y轴的元素个数是逐渐增加的。

通过阅读上述 _update_canvas 函数代码以及 dynamic_canvas.new_timer 可以使得每次调用_update_canvas是的相应的x的元素和y轴的元素增加更改后的代码如下:

import sysimport timeimport numpy as npfrom matplotlib.backends.qt_compat import QtCore, QtWidgets, is_pyqt5if is_pyqt5():  from matplotlib.backends.backend_qt5agg import (    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)else:  from matplotlib.backends.backend_qt4agg import (    FigureCanvas, NavigationToolbar2QT as NavigationToolbar)from matplotlib.figure import Figureclass ApplicationWindow(QtWidgets.QMainWindow):  def __init__(self):    super().__init__()    self._main = QtWidgets.QWidget()    self.setCentralWidget(self._main)    layout = QtWidgets.QVBoxLayout(self._main)    static_canvas = FigureCanvas(Figure(figsize=(5, 3)))    layout.addWidget(static_canvas)    self.addToolBar(NavigationToolbar(static_canvas, self))    dynamic_canvas = FigureCanvas(Figure(figsize=(5, 3)))    layout.addWidget(dynamic_canvas)    self.addToolBar(QtCore.Qt.BottomToolBarArea,            NavigationToolbar(dynamic_canvas, self))    self._static_ax = static_canvas.figure.subplots()    t = np.linspace(0, 10, 501)    self._static_ax.plot(t, np.tan(t), ".")    self.x = [] #建立空的x轴数组和y轴数组    self.y = []    self.n = 0    self._dynamic_ax = dynamic_canvas.figure.subplots()    self._timer = dynamic_canvas.new_timer(      100, [(self._update_canvas, (), {})])    self._timer.start()      def _update_canvas(self):    self.n += 1    if self.n == 200:      #画200个点就停止,根据实际情况确定终止条件      self._timer.stop()       self._dynamic_ax.clear()    self.x.append(np.pi/100*self.n) #x加入一个值,后一个值比前一个大pi/100    xx = np.array(self.x)    # t = np.linspace(0, 10, 101)    # Shift the sinusoid as a function of time.    self._dynamic_ax.plot(xx, np.sin(xx))    self._dynamic_ax.set_xlim(0,7)    self._dynamic_ax.set_ylim(-1,1)    self._dynamic_ax.figure.canvas.draw()if __name__ == "__main__":  qapp = QtWidgets.QApplication(sys.argv)  app = ApplicationWindow()  app.show()  qapp.exec_()

怎么在Pyqt中使用matplotlib实时画图案

上面的图仍然静止,下面的可以实时显示

怎么在Pyqt中使用matplotlib实时画图案

补充:pyqtgraph实时绘图出现无法刷新问题

pyqtgraph实时绘图时,会概率出现无法实时刷新绘制图,原因是

while True:  ......  update()  # 通过 plotitem.setData()更新数据  ......

这里使用的是while循环,不断的更新数据概率出现绘图不刷新和操作不响应(最小化操作会高概率出现该问题)

解决方法1:

我使用的是PlotWidget,remove后再addwidget,然后再重新绘制

解决方法2:

不使用while循环,使用QTime定时器

t = QTimer()t.timeout.connect(self.update)t.start(10)

看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注编程网精选频道,感谢您对编程网的支持。

--结束END--

本文标题: 怎么在Pyqt中使用matplotlib实时画图案

本文链接: https://lsjlt.com/news/250556.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么在Pyqt中使用matplotlib实时画图案
    怎么在Pyqt中使用matplotlib实时画图案?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。运行环境:Python 3.7 + Matplotlib 3.0...
    99+
    2023-06-08
  • 怎么在Python中使用matplotlib绘图
    今天就跟大家聊聊有关怎么在Python中使用matplotlib绘图,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。python有哪些常用库python常用的库:1.requesuts...
    99+
    2023-06-14
  • python使用matplotlib画图时在指定位置加上文字
    使用plt.text()。该函数的语法如下: plt.text(x, y, s, fontdict=None, withdash=False, **kwargs) 参数说明: x 和 y:表示文本注释...
    99+
    2023-09-05
    matplotlib python 开发语言
  • 在PyQt5中使用matplotlib画图不刷新如何解决
    这篇文章将为大家详细讲解有关在PyQt5中使用matplotlib画图不刷新如何解决,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。如下图:我遇到的问题是:当完成一个番茄钟后,需要对统计数据进...
    99+
    2023-06-08
  • 使用python matplotlib画折线图实例代码
    目录matplotlib简介1、画折线图【一条示例】2、画折线图带数据标签3、画多条折线图:4、画多条折线图分别带数据标签:总结matplotlib简介 matplotlib 是py...
    99+
    2024-04-02
  • 怎么在Pyside2中使用Matplotlib进行绘图
    这篇文章主要为大家详细介绍了怎么在Pyside2中使用Matplotlib进行绘图,文中示例代码介绍的非常详细,具有一定的参考价值,发现的小伙伴们可以参考一下: 界面设计简单创建一个界面:一个 GraphicsView 和 一个 PushB...
    99+
    2023-06-06
  • 怎么在python中使用OpenCV画图
    怎么在python中使用OpenCV画图?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。python有哪些常用库python常用的库:1.requesuts;2....
    99+
    2023-06-14
  • Python在画图时怎么使用特殊符号
    这篇文章主要介绍“Python在画图时怎么使用特殊符号”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Python在画图时怎么使用特殊符号”文章能帮助大家解决问题。一、问题背景在论文中,如何使用特殊符...
    99+
    2023-06-30
  • PyQt中怎么使用QMainWindow
    这篇文章给大家分享的是有关PyQt中怎么使用QMainWindow的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。QMainWindow继承自QWidgetQMainWindow相当于程序的主界面,内置了menu和...
    99+
    2023-06-14
  • Python连接数据库怎么使用matplotlib画柱形图
    本篇内容主要讲解“Python连接数据库怎么使用matplotlib画柱形图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python连接数据库怎么使用matplotlib画柱形图”吧!一、柱形...
    99+
    2023-07-02
  • 怎么在Python中利用subplot 在一张画布同时画多张图
    这期内容当中小编将会给大家带来有关怎么在Python中利用subplot 在一张画布同时画多张图,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。subplot(arg1, arg2, arg3)arg1: ...
    99+
    2023-06-06
  • 怎么在Dreamweaver cs5中使用实时视图
    怎么在Dreamweaver cs5中使用实时视图?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。打开软件后我们点击菜单栏上方的查看按钮。接下来我们就可以点击实时视图显示。这时候...
    99+
    2023-06-08
  • 怎么在R语言中使用ggplot2画图
    怎么在R语言中使用ggplot2画图?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用代码 + theme_bw() + theme(p...
    99+
    2023-06-14
  • 怎么在python中使用figure()函数画图
    本篇文章为大家展示了怎么在python中使用figure()函数画图,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。python主要应用领域有哪些1、云计算,典型应用OpenStack。2、WEB前端...
    99+
    2023-06-14
  • 使用Python怎么在画布中绘制图表
    本篇文章给大家分享的是有关使用Python怎么在画布中绘制图表,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。Python主要用来做什么Python主要应用于:1、Web开发;2...
    99+
    2023-06-14
  • 如何在python中使用matplotlib库绘图
    这篇文章给大家介绍如何在python中使用matplotlib库绘图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。首先介绍绘图时常用的基础命令:plt.plot(x,y)即为绘图命令。①基础画图:plt.plot(x,...
    99+
    2023-06-15
  • 怎么在matplotlib中利用subplot添加子图
    这篇文章给大家介绍怎么在matplotlib中利用subplot添加子图,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。概述subplot()函数向当前图像(figure)添加一个子图(Axes),并将该子图设为当前子图...
    99+
    2023-06-14
  • 怎么在matplotlib中使用bar()实现多组数据并列柱状图
    本篇文章给大家分享的是有关怎么在matplotlib中使用bar()实现多组数据并列柱状图,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。绘制单个数据系列的柱形图比较简单,多组数...
    99+
    2023-06-06
  • 怎么在matplotlib中使用pyplot模块
    这期内容当中小编将会给大家带来有关怎么在matplotlib中使用pyplot模块,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。使用xlabel()设置x轴标签函数签名为matplotlib.pyplot...
    99+
    2023-06-06
  • 怎么使用Python+matplotlib实现循环作图
    本篇内容主要讲解“怎么使用Python+matplotlib实现循环作图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么使用Python+matplotlib实现循环作图”吧!一、前言原始代码...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作