为什么当我加载一个.mat
包含图形的文件时,MATLAB 会打开一个绘图窗口struct
?
我面临的问题是我将优化算法的输出作为.mat
文件集合。每个.mat
文件以单个struct
. 状态结构(在其他变量中)有一个 type 字段matlab.ui.Figure
。现在,每当我尝试使用load
命令加载这些文件中的任何一个时,都会自动打开一个绘图窗口。
有什么办法可以阻止 MATLAB 打开这个绘图窗口?
我正在使用 MATLAB 2015rb。
为什么当我加载一个.mat
包含图形的文件时,MATLAB 会打开一个绘图窗口struct
?
我面临的问题是我将优化算法的输出作为.mat
文件集合。每个.mat
文件以单个struct
. 状态结构(在其他变量中)有一个 type 字段matlab.ui.Figure
。现在,每当我尝试使用load
命令加载这些文件中的任何一个时,都会自动打开一个绘图窗口。
有什么办法可以阻止 MATLAB 打开这个绘图窗口?
我正在使用 MATLAB 2015rb。
它显示图形的原因是,如果您仔细观察您的state
结构,就会发现其中figure
存储了一个对象。当您从文件加载此图形对象(或任何对象,实际上)时,MATLAB 将重建该对象。加载图形的定义行为(它的loadobj
方法)是打开图形。
这是一个最近的问题,因为旧版本的 MATLAB 将图形句柄存储为简单的数字,当从文件加载图形句柄时,MATLAB 无法知道它应该是一个数字,因此它只会将其解析为数字和继续前进而不显示新的图形窗口。
不幸的是,由于您的figure
句柄嵌套在 astruct
中,因此没有简单的方法可以不加载它。可能最简单的做法是在加载文件后立即删除图形对象(因为您已经有了句柄)。
data = load('filename.mat', 'state');
delete(data.state.hFigure);
如果您真的不喜欢图形弹出一秒钟,您可以在加载之前将默认图形Visible
属性设置'off'
为,然后再将其重置。
% Determine what the visibility was
prev = get(0, 'DefaultFigureVisible');
% Make it so figures don't appear
set(0, 'DefaultFigureVisible', 'off')
% Load data and delete the figure
data = load('filename.mat', 'state');
delete(state.hFigure);
% Reset the visibility
set(0, 'DefaultFigureVisible', prev)
另一个潜在的解决方案(不需要您知道figure
句柄在结构中的位置)是覆盖DefaultFigureCreateFcn
以简单地删除创建的任何图形。
% After this point you can't create any figures or they will delete themselves
set(0, 'DefaultFigureCreateFcn', @(s,e)delete(s))
% Load your data (no figures!)
load('filename.mat', 'state')
% Allow figures to be created again
set(0, 'DefaultFigureCreateFcn', '')
将来,为避免这种行为,请考虑不要在 .mat 文件中保存任何图形句柄。它们是非常大的对象,MATLAB 在将其保存到文件时实际上会发出警告,因为不推荐这样做。
警告:图形保存在 test.mat 中。保存图形句柄变量可能会导致创建非常大的文件。要保存图形图形,请使用
savefig
.