1

为什么当我加载一个.mat包含图形的文件时,MATLAB 会打开一个绘图窗口struct

我面临的问题是我将优化算法的输出作为.mat文件集合。每个.mat文件以单个struct. 状态结构(在其他变量中)有一个 type 字段matlab.ui.Figure。现在,每当我尝试使用load命令加载这些文件中的任何一个时,都会自动打开一个绘图窗口。

MATLAB 工作区

有什么办法可以阻止 MATLAB 打开这个绘图窗口?

我正在使用 MATLAB 2015rb。

4

1 回答 1

5

它显示图形的原因是,如果您仔细观察您的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.

于 2016-05-22T15:29:51.073 回答