I have some more constraints on this problem. I am saving all of the generated figures to files. There are about 100 figures being generated and they are saved at a rate of about 5-10 figures per minute. The object is to stop the figure window from popping up each time a new figure is generated. Can the figures be generated in the background.
keep figures from popping up when running.
311 次查看(过去 30 天)
显示 更早的评论
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 个评论
Walter Roberson
2011-6-15
编辑:Walter Roberson
2019-8-20
I suggest you try export_fig
which can save a figure.
I have not experimented with it or looked at how it works, so I do not know if it would trigger a pop-up.
Jan
2011-6-15
@Michael: AFAICS the problem concerns Linux only. Therefore I asked which OS you are using.
Does PRINT move the figure to the front also?
回答(9 个)
Walter Roberson
2011-6-15
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 个评论
Jan
2011-6-15
@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.
Gurudatha Pai
2011-6-15
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 个评论
Watson Ly
2019-8-20
figure_handle = figure(1)
figure_handle.WindowState = 'minimized'
.....
set(0, 'CurrentFigure', figure_handle)
plot([1:10],[1:10])
it worked for me
Jan
2011-6-15
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 个评论
Jan
2011-6-15
@Michael: I did not even try to show a solution. I still do not see the problem at all, because the figures are *not* created in the forground at all - are they? I simply cannot confirm this: "When the figure pops up it disrupts anything else you are doing on the computer".
Of course GETFRAME does not work with figures not shown in the foreground, but you do not mention any problems with bad output here, but that the figure pops to the foreground. But PRINT handles background, out of visible screen area and Visible=off figures also.
Can somebody enlighten me, please?
Fangjun Jiang
2011-6-15
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 个评论
Walter Roberson
2011-6-15
The delete() code shown here would not get hidden handles. Some figure children are created with hidden handles.
Michael Marcus
2011-6-16
2 个评论
Nik Rocky
2020-6-25
Hello Michael, can you upload here your solution? Your link is not working and I have the same Problem (Kubuntu 16.4). Thank you
Fred Sigworth
2018-1-5
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 个评论
Walter Roberson
2020-7-3
I specifically said above, "Yes: do not figure() it."
No calls to figure() inside your loop.
fig1 = figure(1);
ax1 = axes('Parent', fig1);
count=10;
Matrix1 = magic(100);
for i=1:count
mesh(ax1, Matrix1);
pause(1);
end
Stephan Moeller
2020-7-5
ok. Sorry, missed that.
How would it work with a subplot ?
( fig1 = subplot(2,1,1);figure(1); )
Stephan Moeller
2020-7-9
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
0 个评论
Victor v. Spaandonk
2021-8-5
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
0 个评论
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Specifying Target for Graphics Output 的更多信息
产品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!