Как подавить фигуры? - PullRequest
8 голосов
/ 07 марта 2012

Как я могу подавить отображение окна рисунка, сохраняя при этом черчение в фоновом режиме для сохранения результирующего графика в конце цикла?Какова лучшая практика, чтобы сделать это?В настоящее время мой код выглядит следующим образом:

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 ]

17 голосов
/ 08 марта 2012

Чтобы текущая фигура не была видна:

set(gcf,'visible','off')
13 голосов
/ 05 апреля 2013

Из справки MathWorks :

Чтобы не отображать цифры в MATLAB, вы можете запустить MATLAB с помощью опции noFigureWindows.Эта опция недоступна в 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 голосов
/ 17 марта 2016

Другие ответы у меня не работали на R2015b на Ubuntu, мое окно с рисунком всегда отображалось.

Я обрабатываю более 100 файлов, и всплывающее окно с рисунком не позволяет мне использовать компьютер во время обработки файлов.

Вот обходной путь, запускает Matlab без дисплея:

matlab -nodesktop -nodisplay

и это предотвратит появление окон рисунков. Программное сохранение рисунка в файл все еще работает.

0 голосов
/ 28 сентября 2017

Как уже было сказано ранее, для подавления отображения цифр во время первого вызова

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...