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
以在 on
和 off
之间切换保持状态,则 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
总是会导致情节被搁置。
我将默认的 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
以在 on
和 off
之间切换保持状态,则 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
总是会导致情节被搁置。