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

相关文章

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

SigLIP——采用sigmoid损失的图文预训练方式

SigLIP——采用sigmoid损失的图文预训练方式 FesianXu 20240825 at Wechat Search Team 前言 CLIP中的infoNCE损失是一种对比性损失,在SigLIP这个工作中,作者提出采用非对比性的sigmoid损失,能够更高效地进行图文预训练,本文进行介绍。如有谬误请见谅并联系指出,本文遵守CC 4.0 BY-SA版权协议,转载请联系作者并注

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

一款支持同一个屏幕界面同时播放多个视频的视频播放软件

GridPlayer 是一款基于 VLC 的免费开源跨平台多视频同步播放工具,支持在一块屏幕上同时播放多个视频。其主要功能包括: 多视频播放:用户可以在一个窗口中同时播放任意数量的视频,数量仅受硬件性能限制。支持多种格式和流媒体:GridPlayer 支持所有由 VLC 支持的视频格式以及流媒体 URL(如 m3u8 链接)。自定义网格布局:用户可以配置播放器的网格布局,以适应不同的观看需求。硬

matplotlib绘图中插入图片

在使用matplotlib下的pyplot绘图时,有时处于各种原因,需要采用类似贴图的方式,插入外部的图片,例如添加自己的logo,或者其他的图形水印等。 一开始,查找到的资料都是使用imshow,但是这会有带来几个问题,一个是图形的原点发生了变化,另外一个问题就是图形比例也产生了变化,当然最大的问题是图形占据了整个绘图区域,完全喧宾夺主了,与我们设想的只在绘图区域中占据很小的一块不相符。 经

【Python篇】PyQt5 超详细教程——由入门到精通(终篇)

文章目录 PyQt5超详细教程前言第9部分:菜单栏、工具栏与状态栏9.1 什么是菜单栏、工具栏和状态栏9.2 创建一个简单的菜单栏示例 1:创建带有菜单栏的应用程序代码详解: 9.3 创建工具栏示例 2:创建带有工具栏的应用程序代码详解: 9.4 创建状态栏示例 3:创建带有状态栏的应用程序代码详解: 9.5 菜单栏、工具栏与状态栏的结合示例 4:完整的应用程序界面代码详解: 9.6 总结