keep figures from popping up when running.

473 views (last 30 days)
Michael Marcus
Michael Marcus on 15 Jun 2011
I am doing a lot of batch processing in which I creating many figures. I would like to keep these figures in the background while running the Matlab code without the Figure window popping up each time a new figure is created. Is there an easy way to do this? When the figure pops up it disrupts anything else you are doing on the computer.
  4 Comments
Jan
Jan on 15 Jun 2011
@Michael: AFAICS the problem concerns Linux only. Therefore I asked which OS you are using.
Does PRINT move the figure to the front also?

Sign in to comment.

Answers (9)

Walter Roberson
Walter Roberson on 15 Jun 2011
Please see this discussion
Someone indicated, though, that they could not get the figures to be saved when they used this technique. Possibly Oliver's export_fig would work. Or running MATLAB without a display and using one of the print() options that are documented as not needing a display.
  4 Comments
Jan
Jan on 15 Jun 2011
@Walter: Thanks, now I'm starting to understand the problem. Under Windows new figures are created on top of all other Matlab figures, but below the program which has the focus. And GETFRAME replies the contents of the screen at the figure (or axes) coordinates - if the figure is not topmost this is most likely not the wanted picture.

Sign in to comment.


Gurudatha Pai
Gurudatha Pai on 15 Jun 2011
I won't promise you that this is the best solution, however, is one of them.
You could set the 'visible' property off the figure object to 'off'. It can be done something like this,
h1 = figure();
set(h1, 'Visible', 'off');
plot(x,y)
and when you want it to be shown,
set(h1, 'Visible', 'off');
or
figure(h1)
should also work.
  4 Comments
Watson  Ly
Watson Ly on 20 Aug 2019
figure_handle = figure(1)
figure_handle.WindowState = 'minimized'
.....
set(0, 'CurrentFigure', figure_handle)
plot([1:10],[1:10])
it worked for me

Sign in to comment.


Jan
Jan on 15 Jun 2011
As long as I do not use Java or Windows-API methods to set the topmost flag of the window, I do not get this behaviour.
pause(10);
figure;
% Enable the Explorer, NotePad, any other program
% After the 10 secs have passed, ...
% the figure is created - in the background!
Which OS are you using? Do you create figures with WindowStyle='modal'?
  3 Comments
Michael Marcus
Michael Marcus on 16 Jun 2011
getframe does work with figures that are not shown in the foreground and causes them to pop up into the foreground even if the figure visible is set to off as follows
h1 = figure();set(gcf,'Visible', 'off');

Sign in to comment.


Fangjun Jiang
Fangjun Jiang on 15 Jun 2011
I think you can do this. It will pop up only once. The point is to re-use the figure. You can delete all its contents once they are printed. You can step through it to see the effect.
h=figure;
set(h,'visible','off');
plot(1:10);
print(h);%use your own command, this sends it to the printer
delete(get(h,'children'));
subplot(2,1,1); %do this just for illustration
plot(1:10);
subplot(2,1,2);
plot(1:10);
set(h,'visible','on');
delete(get(h,'children'));
  2 Comments
Walter Roberson
Walter Roberson on 15 Jun 2011
The delete() code shown here would not get hidden handles. Some figure children are created with hidden handles.

Sign in to comment.


Michael Marcus
Michael Marcus on 16 Jun 2011
I am still having the problem with getframe still cuasing a pop up window. However I have found a viable solution using the function export_fig instead provided by Oliver Woodford.
Thanks to everyone for helping. This is the first time I used this resource.
  2 Comments

Sign in to comment.


Oliver Woodford
Oliver Woodford on 16 Jun 2011
This question has been answered already elsewhere.

Fred Sigworth
Fred Sigworth on 5 Jan 2018
I have this sort of problem too. I use Matlab on Mac OS. Suppose I have a program that draws in two figure windows which are overlapping. When I execute
figure(1); plot(some_data_vector); figure(2); plot(another_data_vector);
this puts figure 1 in front, draws on it, then puts figure 2 in front and draws on it. Is there any way I can update figure 2 without it becoming the front window?
I also run Matlab on a linux machine, and use XQuartz as the X-terminal. In that situation calling figure(1) puts that figure window in front of everything on the screen, which is more annoying still. Again, is there a way to draw in a figure (and have the graphics on the screen update) without the figure window being in front?
  6 Comments
Stephan Moeller
Stephan Moeller on 5 Jul 2020
ok. Sorry, missed that.
How would it work with a subplot ?
( fig1 = subplot(2,1,1);figure(1); )

Sign in to comment.


Stephan Moeller
Stephan Moeller on 9 Jul 2020
Got it :
count=5;
Matrix1 = magic(100);
Vector1=rand(10,1);
figure(4);
ax1= subplot(2,1,1);
ax2= subplot(2,1,2);
AX=[ax1,ax2];
for i=1:count
mesh(AX(1), Matrix1);
plot(AX(2), Vector1);
pause(0.5);
end

Victor v. Spaandonk
Victor v. Spaandonk on 5 Aug 2021
I feel like this didn't use to be the default behavior for me but now it is (figures popping up over other windows applications).
could it be a setting?
I'm at R2018b

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!