matlab - MATLAB - 如果在类构造函数中创建子图,则轴句柄将被删除
问题描述
我正在重构一个现有的(工作的)MATLAB 代码,特别是我从一段创建图形的结构化代码中提取一个新类,当我这样做时,我得到一个由图形的轴被删除引起的错误(我的变量现在说它包含一个handle to deleted axes
)。
更详细地说,当前版本的代码执行如下操作:
Overlay = figure
overlayAxes = subplot(1, 2, 1, 'Parent', Overlay)
... (other stuff)
imshow(... other parameters ..., overlayAxes)
(我提到“其他东西”和“其他参数”以澄清该imshow
行不直接在overlayAxes
分配之上,以防你认为我应该在调用之前特别寻找任何东西imshow
)
这工作正常。我的重构在于将创建移动Overlay
到一个类(换句话说,使它更像“OOP”)。作为第一步,我将它移到这样的类中:
classdef MyGUI < handle
properties(SetAccess = public)
Overlay
overlayAxes
end
methods
function obj = MyGUI()
obj.Overlay = figure;
obj.overlayAxes = subplot(1, 2, 1, 'Parent', obj.Overlay);
end
end
end
然后我引用了这个Overlay
最初创建的新类:
GUI = MyGUI;
Overlay = GUI.Overlay;
overlayAxes = GUI.overlayAxes;
(我做了这两个变量赋值,所以我现在不必更改其余代码 - 因为它Overlay
不引用GUI.Overlay
- 特别是对 的调用imshow
)
所以,当我这样做时,调用imshow
失败说:
Error using imshow>validateParent (line 375)
HAX must be a valid axes handle.
事实证明,当我调试和检查时overlayAxes
,它说它包含一个handle to deleted axes
.
我读过一些文章,解释当创建新图形时轴会被删除等,但我所做的唯一更改是将图形创建从局部变量转换为类属性,所以我不觉得是什么与再次调用绘图函数或类似的副作用有关,但可能与通过引用传递、对象生命周期或我完全丢失的东西有关,不太确定。
为什么我的斧头会被删除?谢谢!
解决方案
推荐阅读
- java - 在 TomTom Android SDK 中返回的位置为空
- java - 不兼容的类型:RGBColor [][] 无法转换为 Double [][] -Error
- html - 缩小时网页中的空白
- plot - 轴号相互干扰
- android - Android 不显示 READ_CONTACT WRITE_CONTACTS 的权限请求对话框
- javascript - 从 AG-Grid 中移除焦点
- python - python:从 python 字符串列表中提取浮点数(31.99 澳元)
- three.js - Threejs中网格对应材质的光线选择问题
- css - 按钮内的图标未在 iphone 中居中
- microservices - 使用 Service Fabric 的微服务在哪里放置控制器