Drawing figure in a for loop

Hello all,
I have a for loop and I want to see the progress of the figure as the loop goes. Basically the code is like this:
SNRdB=0:20;
nErr=zeros(length(SNRdB),1);
for ii=1:length(SNRdB)
...
nErr(ii)=...
figure(1)
semilogy(SNRdB,nErr)
end
However, when I write it this way the figure is halted during the next loop and I cannot see it. How can I see the figure freely while the loop is running?
Thanks

7 Comments

Do you mean halted on the next iteration of the loop ( ii==2 ), or do you have a subsequent loop that follows the one above?
And what exactly do you mean by halted? Does the figure stop updating (freeze with plot from previous iteration)? When the loop exits, does the figure refresh with the last known plot?
S. David
S. David on 21 Jun 2014
Edited: S. David on 21 Jun 2014
Yes, next iteration means for ii=2. Halted means that I can see the frame of the figure but I cannot see the curves inside the figure. Each for loop takes too long (more than 15 minutes) and I have to minimize the figure to the task bar. I want a method of which I can view the curves inside the figure at any time I want by retrieving the figure frame from the task bar.
Note: If I keep the figure frame shown at the top of my desktop, the figure is updated and I can see the curves. But I have other things to do while the figure is being updated, so I have to minimize it.
An alternative may be to save the figure to an image file which you could then view in some other application
h = figure(1);
semilogy(SNRdB,nErr);
saveas(h,'semilogyFigure','jpg');
@Geoff — I think that defeats the purpose of seeing it in real-time!
Right…but since it is minimized, your not really looking at the figure anyway. I took "minimized to the task bar" to mean that the figure was not visible at all and only available if you clicked it from the task bar.
I also understood "Each for loop takes too long (more than 15 minutes)" to mean that each iteration of the for loop takes 15 minutes to complete…given that the code only shows one for loop. I may have misunderstood that! :)
Minimising it seems to be the problem.
Right - and S. is minimizing it because he has other stuff to do and doesn't want to see that figure or have it occupy area on his screen. Only at some point later does S. want to review the figure to check the progress by "retrieving the figure frame from the task bar".

Sign in to comment.

Answers (2)

Star Strider
Star Strider on 21 Jun 2014
The drawnow function and its friends will probably do what you want. The Example is fun to watch!

2 Comments

I did this, and it works as long as the update occurs while the figure is not minimized to the task bar.
The problem is that the update process takes too long, and thus I have to minimize the figure to the task bar to do something else. The update will occur randomly while the figure is minimized. So, when I press on the figure in the task bar to see it after the update, again, it is halted and I cannot see it!!
Star Strider
Star Strider on 21 Jun 2014
Edited: Star Strider on 21 Jun 2014
Nothing in the UI functions offers a solution, unfortunately.
My only suggestion is to not minimise it to the taskbar but position the figure off to the side, and then click on it when you want to see it. This is my usual strategy, but then I don’t know what’s on your desktop or how it’s organised.
You can also bring it to the foreground by clicking on it on the toolbar even when it’s not minimised. If you don’t minimise it, you may avoid the problem entirely.

Sign in to comment.

Image Analyst
Image Analyst on 21 Jun 2014
Why are you calling figure(1) at all? Just get rid of it. You can use maxfig (in MATLAB Central) to get the window state and if it's not minimized, call drawnow after you call plot.

6 Comments

The problem is that he minimises it to the Taskbar. (See OP’s first comment to my Answer.)
Why is that a problem? Are you saying that the entire program comes to a screeching halt once it's minimized? He said drawnow works as long as it's not minimized so if you detect that and not call drawnow when it's minimized like I suggested, wouldn't that work? It should work if the drawnow was the problem. It won't work if the program totally pauses if it gets minimized.
I believe the problem is that the figure doesn’t update when it’s minimized. OP wants it to.
I couldn't find maxfig in MATLAB help!!
Looks like they took it down. You can try this or try this

Sign in to comment.

Categories

Find more on Graphics Performance in Help Center and File Exchange

Asked:

on 21 Jun 2014

Commented:

on 22 Jun 2014

Community Treasure Hunt

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

Start Hunting!