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

相关文章

Spring MVC如何设置响应

《SpringMVC如何设置响应》本文介绍了如何在Spring框架中设置响应,并通过不同的注解返回静态页面、HTML片段和JSON数据,此外,还讲解了如何设置响应的状态码和Header... 目录1. 返回静态页面1.1 Spring 默认扫描路径1.2 @RestController2. 返回 html2

Python中的可视化设计与UI界面实现

《Python中的可视化设计与UI界面实现》本文介绍了如何使用Python创建用户界面(UI),包括使用Tkinter、PyQt、Kivy等库进行基本窗口、动态图表和动画效果的实现,通过示例代码,展示... 目录从像素到界面:python带你玩转UI设计示例:使用Tkinter创建一个简单的窗口绘图魔法:用

使用PyQt5编写一个简单的取色器

《使用PyQt5编写一个简单的取色器》:本文主要介绍PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16进制颜色编码,一款跟随鼠标刷新图像的RGB和16... 目录取色器1取色器2PyQt5搭建的一个取色器,一共写了两款应用,一款使用快捷键捕获鼠标附近图像的RGB和16

使用Python实现批量访问URL并解析XML响应功能

《使用Python实现批量访问URL并解析XML响应功能》在现代Web开发和数据抓取中,批量访问URL并解析响应内容是一个常见的需求,本文将详细介绍如何使用Python实现批量访问URL并解析XML响... 目录引言1. 背景与需求2. 工具方法实现2.1 单URL访问与解析代码实现代码说明2.2 示例调用

Python中构建终端应用界面利器Blessed模块的使用

《Python中构建终端应用界面利器Blessed模块的使用》Blessed库作为一个轻量级且功能强大的解决方案,开始在开发者中赢得口碑,今天,我们就一起来探索一下它是如何让终端UI开发变得轻松而高... 目录一、安装与配置:简单、快速、无障碍二、基本功能:从彩色文本到动态交互1. 显示基本内容2. 创建链

AI绘图怎么变现?想做点副业的小白必看!

在科技飞速发展的今天,AI绘图作为一种新兴技术,不仅改变了艺术创作的方式,也为创作者提供了多种变现途径。本文将详细探讨几种常见的AI绘图变现方式,帮助创作者更好地利用这一技术实现经济收益。 更多实操教程和AI绘画工具,可以扫描下方,免费获取 定制服务:个性化的创意商机 个性化定制 AI绘图技术能够根据用户需求生成个性化的头像、壁纸、插画等作品。例如,姓氏头像在电商平台上非常受欢迎,

C#实战|大乐透选号器[6]:实现实时显示已选择的红蓝球数量

哈喽,你好啊,我是雷工。 关于大乐透选号器在前面已经记录了5篇笔记,这是第6篇; 接下来实现实时显示当前选中红球数量,蓝球数量; 以下为练习笔记。 01 效果演示 当选择和取消选择红球或蓝球时,在对应的位置显示实时已选择的红球、蓝球的数量; 02 标签名称 分别设置Label标签名称为:lblRedCount、lblBlueCount

科研绘图系列:R语言扩展物种堆积图(Extended Stacked Barplot)

介绍 R语言的扩展物种堆积图是一种数据可视化工具,它不仅展示了物种的堆积结果,还整合了不同样本分组之间的差异性分析结果。这种图形表示方法能够直观地比较不同物种在各个分组中的显著性差异,为研究者提供了一种有效的数据解读方式。 加载R包 knitr::opts_chunk$set(warning = F, message = F)library(tidyverse)library(phyl

深入理解RxJava:响应式编程的现代方式

在当今的软件开发世界中,异步编程和事件驱动的架构变得越来越重要。RxJava,作为响应式编程(Reactive Programming)的一个流行库,为Java和Android开发者提供了一种强大的方式来处理异步任务和事件流。本文将深入探讨RxJava的核心概念、优势以及如何在实际项目中应用它。 文章目录 💯 什么是RxJava?💯 响应式编程的优势💯 RxJava的核心概念

简单的角色响应鼠标而移动

actor类 //处理移动距离,核心是找到角色坐标在世界坐标的向量的投影(x,y,z),然后在世界坐标中合成,此CC是在地面行走,所以Y轴投影始终置为0; using UnityEngine; using System.Collections; public class actor : MonoBehaviour { public float speed=0.1f; CharacterCo