pyside2|PYQT5 采用matplotlib实时绘图界面卡死、无响应

2023-11-08 12:30

本文主要是介绍pyside2|PYQT5 采用matplotlib实时绘图界面卡死、无响应,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

程序目的实时检测传感器数据,调用云端模型给出预测结果,并做实时数据绘图

问题程序长时间运行后,云端模型能够实时给出预测结果,但是绘图窗口卡顿,最终界面卡死

以下是 原程序 绘图部分代码:

    def plot_and_show(self):global obsXglobal obsYglobal diagnosis_resultglobal jself.textEdit.append(f'{diagnosis_result}')self.textEdit.ensureCursorVisible()plot_x = np.concatenate((obsX))[0:500:10]  plot_y = np.concatenate((obsY), axis=1)[:,0:500:10] # 绘图数据ax = self.figure1.add_subplot(211)ax.plot(plot_x, plot_y[0, :]/500, '-r', marker='*')ax.plot(plot_x, plot_y[1, :]/500, '-g', marker='*')ax.plot(plot_x, plot_y[2, :]/500, '-y', marker='*')ax.plot(plot_x, plot_y[3, :]/500, '-k', marker='*')ax.set_xlim([j-3,j+1])ax.set_ylim([-5,5])plt.legend(labels = ['速度1', '速度2', '速度3', '速度4'], loc = 'best', prop= {'family':'SimHei', 'weight':'normal'})ax1 = self.figure1.add_subplot(212)ax1.plot(plot_x, plot_y[8, :], '-r',marker='*')ax1.plot(plot_x, plot_y[9, :], '-g',marker='*')ax1.plot(plot_x, plot_y[10, :], '-y',marker='*')ax1.plot(plot_x, plot_y[11, :], '-k',marker='*')plt.legend(labels = ['力矩1', '力矩2', '力矩3', '力矩4'], loc = 'best', prop= {'family':'SimHei', 'weight':'normal'})ax1.set_xlim([j-3,j+1])ax1.set_ylim([-2,2])      self.canvas1.draw()

绘图效果:

寻找问题过程中,删除 set_xlim() set_ylim()代码后,绘图结果如图:

可以看到 历史绘图 全部保存在画布中,长时间运行后,缓存数据太多,导致程序的卡死

问题解决方法

在绘图程序前,加入代码: plt.clf()  清空画布,问题解决

 def plot_and_show(self):global obsXglobal obsYglobal diagnosis_resultglobal jself.textEdit.append(f'{diagnosis_result}')self.textEdit.ensureCursorVisible()plot_x = np.concatenate((obsX))[0:500:10]  plot_y = np.concatenate((obsY), axis=1)[:,0:500:10] # 绘图数据plt.clf()ax = self.figure1.add_subplot(211)ax.plot(plot_x, plot_y[0, :]/500, '-r', marker='*')ax.plot(plot_x, plot_y[1, :]/500, '-g', marker='*')ax.plot(plot_x, plot_y[2, :]/500, '-y', marker='*')ax.plot(plot_x, plot_y[3, :]/500, '-k', marker='*')ax.set_xlim([j-3,j+1])ax.set_ylim([-5,5])plt.legend(labels = ['速度1', '速度2', '速度3', '速度4'], loc = 'best', prop= {'family':'SimHei', 'weight':'normal'})ax1 = self.figure1.add_subplot(212)ax1.plot(plot_x, plot_y[8, :], '-r',marker='*')ax1.plot(plot_x, plot_y[9, :], '-g',marker='*')ax1.plot(plot_x, plot_y[10, :], '-y',marker='*')ax1.plot(plot_x, plot_y[11, :], '-k',marker='*')plt.legend(labels = ['力矩1', '力矩2', '力矩3', '力矩4'], loc = 'best', prop= {'family':'SimHei', 'weight':'normal'})ax1.set_xlim([j-3,j+1])ax1.set_ylim([-2,2])      self.canvas1.draw()

import matplotlib.pyplot as pltplt.clf() # 清图。
plt.cla() # 清坐标轴。
plt.close() # 关窗口

这篇关于pyside2|PYQT5 采用matplotlib实时绘图界面卡死、无响应的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/369884

相关文章

Python与MySQL实现数据库实时同步的详细步骤

《Python与MySQL实现数据库实时同步的详细步骤》在日常开发中,数据同步是一项常见的需求,本篇文章将使用Python和MySQL来实现数据库实时同步,我们将围绕数据变更捕获、数据处理和数据写入这... 目录前言摘要概述:数据同步方案1. 基本思路2. mysql Binlog 简介实现步骤与代码示例1

Python多线程应用中的卡死问题优化方案指南

《Python多线程应用中的卡死问题优化方案指南》在利用Python语言开发某查询软件时,遇到了点击搜索按钮后软件卡死的问题,本文将简单分析一下出现的原因以及对应的优化方案,希望对大家有所帮助... 目录问题描述优化方案1. 网络请求优化2. 多线程架构优化3. 全局异常处理4. 配置管理优化优化效果1.

Django HTTPResponse响应体中返回openpyxl生成的文件过程

《DjangoHTTPResponse响应体中返回openpyxl生成的文件过程》Django返回文件流时需通过Content-Disposition头指定编码后的文件名,使用openpyxl的sa... 目录Django返回文件流时使用指定文件名Django HTTPResponse响应体中返回openp

深入浅出SpringBoot WebSocket构建实时应用全面指南

《深入浅出SpringBootWebSocket构建实时应用全面指南》WebSocket是一种在单个TCP连接上进行全双工通信的协议,这篇文章主要为大家详细介绍了SpringBoot如何集成WebS... 目录前言为什么需要 WebSocketWebSocket 是什么Spring Boot 如何简化 We

PyQt5 GUI 开发的基础知识

《PyQt5GUI开发的基础知识》Qt是一个跨平台的C++图形用户界面开发框架,支持GUI和非GUI程序开发,本文介绍了使用PyQt5进行界面开发的基础知识,包括创建简单窗口、常用控件、窗口属性设... 目录简介第一个PyQt程序最常用的三个功能模块控件QPushButton(按钮)控件QLable(纯文本

WinForm跨线程访问UI及UI卡死的解决方案

《WinForm跨线程访问UI及UI卡死的解决方案》在WinForm开发过程中,跨线程访问UI控件和界面卡死是常见的技术难题,由于Windows窗体应用程序的UI控件默认只能在主线程(UI线程)上操作... 目录前言正文案例1:直接线程操作(无UI访问)案例2:BeginInvoke访问UI(错误用法)案例

Windows环境下解决Matplotlib中文字体显示问题的详细教程

《Windows环境下解决Matplotlib中文字体显示问题的详细教程》本文详细介绍了在Windows下解决Matplotlib中文显示问题的方法,包括安装字体、更新缓存、配置文件设置及编码調整,并... 目录引言问题分析解决方案详解1. 检查系统已安装字体2. 手动添加中文字体(以SimHei为例)步骤

CSS3打造的现代交互式登录界面详细实现过程

《CSS3打造的现代交互式登录界面详细实现过程》本文介绍CSS3和jQuery在登录界面设计中的应用,涵盖动画、选择器、自定义字体及盒模型技术,提升界面美观与交互性,同时优化性能和可访问性,感兴趣的朋... 目录1. css3用户登录界面设计概述1.1 用户界面设计的重要性1.2 CSS3的新特性与优势1.

使用Python和OpenCV库实现实时颜色识别系统

《使用Python和OpenCV库实现实时颜色识别系统》:本文主要介绍使用Python和OpenCV库实现的实时颜色识别系统,这个系统能够通过摄像头捕捉视频流,并在视频中指定区域内识别主要颜色(红... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间详解

OpenCV实现实时颜色检测的示例

《OpenCV实现实时颜色检测的示例》本文主要介绍了OpenCV实现实时颜色检测的示例,通过HSV色彩空间转换和色调范围判断实现红黄绿蓝颜色检测,包含视频捕捉、区域标记、颜色分析等功能,具有一定的参考... 目录一、引言二、系统概述三、代码解析1. 导入库2. 颜色识别函数3. 主程序循环四、HSV色彩空间