如何抑制数字?

时间:2012-03-07 19:53:57

标签: matlab plot

如何在显示背景时抑制图形窗口的显示,以便在运行结束时保存结果图?这样做的最佳做法是什么?目前,我的代码是这样的:

showPlot = 1; % switch to turn plotting on/off

fig = figure(1); clf; hold on;
lineHandle = line(nan, nan);
total = 0;

for i = 1:10000
    % long calculation
    total = total + 1;
    set(0, 'CurrentFigure', fig);
    xlim([0, total]);
    x = [get(lineHandle, 'XData'), total];
    y = [get(lineHandle, 'YData'), rand()];
    set(lineHandle, 'XData', x, 'YData', y);       
    drawnow;
end

% saveas(gcf, file, 'png');

我想以这样的方式设置代码:当我将showPlot设置为0时,图形窗口不会显示,但是图表会保存到文件中。

4 个答案:

答案 0 :(得分:17)

要使当前数字不可见:

set(gcf,'visible','off')

答案 1 :(得分:13)

来自MathWorks-reference

为避免在MATLAB中显示数字,您可以使用noFigureWindows选项启动MATLAB。此选项在UNIX上不可用。

matlab -noFigureWindows

作为替代方法,您可以更改MATLAB根对象的默认图形属性:

set(0,'DefaultFigureVisible','off')

如果您想暂时禁止稍后可在同一会话中访问的新数据,则可以保存数字句柄:

set(0,'DefaultFigureVisible','off');

 %create invisible figure 1
 h(1)=figure;
 %create invisible figure 2 
 h(2)=figure;

 set(0,'DefaultFigureVisible','on');
 %show figure 1
 figure(1)

顺便说一下,close all会关闭所有当前打开的数字。

答案 2 :(得分:2)

在U20ntu的R2015b上,其他答案对我不起作用,我的数字窗口总会显示出来。

我正在处理100多个文件,弹出的图形窗口阻止我在处理文件时使用我的电脑。

这是一个解决方法,启动没有显示的matlab:

matlab -nodesktop -nodisplay

这将阻止数字窗口显示。以编程方式将图形保存到文件仍然有效。

答案 3 :(得分:0)

如前所述,要在实例化期间禁止显示数字,请先调用

set(0, 'DefaultFigureVisible', 'off');
% or, if post Matlab R2014b 
set(groot, 'DefaultFigureVisible', 'off');

在此调用之后,在脚本中创建新数字不会导致弹出可见窗口。当然,恢复此设置的方法是

set(0, 'DefaultFigureVisible', 'on');
% or, if post Matlab R2014b 
set(groot, 'DefaultFigureVisible', 'on');

“陷阱”是激活现有数字以进一步操纵导致可见窗口 - 如果操作不正确:

% suppress visible plot window creation
set(groot, 'DefaultFigureVisible', 'on');
figure(1); % will not result in a visible window
plot(0:.01:pi,sin(0:.01:pi));
hold on
figure(2); % still no visible window
plot(0:.01:10,(0:.01:10).^2);
% so far so good
% ... other statements ...
% select figure 1 to add to it:
figure(1); % visible window appears!
plot(0:.01:pi,cos(0:.01:pi));
hold off;
% ...

解决方法是使用另一个 set 命令来选择现有数据:

set(groot, 'DefaultFigureVisible', 'on');
figure(1); % will not result in a visible window
plot(0:.01:pi,sin(0:.01:pi));
hold on
figure(2); % still no visible window
plot(0:.01:10,(0:.01:10).^2);
set(groot, 'CurrentFigure', 1); % still no visible window
% plot commands will apply to figure 1
plot(0:.01:pi,cos(0:.01:pi));
hold off
% ...

无论“DefaultFigureVisible”的设置如何,都要调用

figure(h);

其中h是现有绘图窗口的句柄或整数,导致该窗口变为活动且可见。因此,可以通过这种方式在脚本底部显示所有图:

fh = get(groot, 'Children');
for x = 1:numel(fh)
  figure(fh(x));
end