matlab:当 'add' 不是默认值时,`hold off` 语句会永久更改 FigureNextplot 属性

matlab: `hold off` statement changes FigureNextplot property permanently when 'add' is not the default

我将默认的 FigureNextplot 属性 设置为 'new',而不是出厂默认设置 'add':

set(groot, 'DefaultFigureNextplot', 'new')

当使用 hold on 时,Matlab 将 FigureNextplot 和 AxesNextplot 属性设置为 'add',这是应该的。然而,当我完成图表工作时,hold off 重置了 AxesNextplot 属性,而不是 FigureNextplot 属性.

这背后的原因是什么?有没有办法继续使用我的默认设置而不删除我的所有 hold 语句的代码?

您可以使用变通方法来防止图的 NextPlot 属性 被更改:

  • 通过将以下用户定义的函数保存在名为 hold.m 的文件中拦截对 hold 的调用,将该文件放在用户文件夹中并将该文件夹添加到 [=15] 的路径中=].
  • 这个用户自定义函数记下了图的NextPlot属性,调用原来的hold函数,然后恢复图的NextPlot属性.
function hold(varargin)

fnp = get(gcf, 'NextPlot'); % get figure's NextPlot property
w = which('hold' ,'-all'); % paths to the modified and original hold functions
dir = pwd; % take note of current folder
cd(fileparts(w{2})); % change to folder of original hold function
oh = @hold; % get a handle to that function
cd(dir) % restore folder
feval(oh, varargin{:}) % call original hold function
set(gcf, 'NextPlot', fnp); % set figure's NextPlot property to its previous value

请注意,如果您不带参数调用 hold 以在 onoff 之间切换保持状态,则 on 状态被识别为具有值 add 的图形和轴的 NextPlot 属性。这个可以看原hold函数的代码:

nexta = get(ax,'NextPlot');
nextf = get(fig,'NextPlot');
hold_state = strcmp(nexta,'add') && strcmp(nextf,'add');

因此,如果图形的 NextPlot 属性 具有值 New,则 hold 状态始终被视为 off,无论值如何轴的 NextPlot 属性。因此,不带参数调用 hold 总是会导致情节被搁置。