Using gcf in functions
35 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I make plots in the main part of my scripts but I also do plotting from functions. It appears that when I call a function, gcf does not have to be passed as an argument, i.e., it appears as though gcf is some sort of global variable. I say "appears" because some times gcf doesn't seem to get updated and a plot from within a function will wipe out a previously generated figure from the main script. Can someone point me to some documentation that will clear this up for me?
Below is a sketch of the kind of thing I am trying to do. When I try passing gcf as an argument I still get inconsistent results.
% main part of script
t=0:100; y=sin(2*pi*t/20); figure(1); plot(t,y); dummy=RoutineThatDoesPlotting(t,y);
..... % end of script
function dummy=RoutineThatDoesPlotting(t,y); figure(gcf+1); plot(t,y); dummy=1; % end of function
Thanks for your help.
Dave
0 Commenti
Risposta accettata
Image Analyst
il 21 Feb 2012
gcf is basically the handle to the last figure window that you actued upon or brought up. It is the "current" one that things will happen in unless you specify otherwise. I don't think figure(gcf+1) is a wise idea though, because gcf won't always be an integer. It may have some weird handle number like 178.372, especially if it was created by running an app built with GUIDE. Just say fh = figure; instead, and that will create a figure and pick a handle number for it automatically rather than you trying to force it to use some particular number.
0 Commenti
Più risposte (1)
Jiro Doke
il 21 Feb 2012
gcf is not a variable, but rather a function. So you don't need to treat it like an input argument to other functions. Whenever you call it, it will retrieve whichever is the current figure.
As for your issue, my advice is for you to not use gcf like that, i.e. gcf+1. Even though gcf may return a number, you shouldn't do any sort of arithmetic with it. If you just want to create a new figure (and not overwrite previous figures), just call figure with no input argument:
% main part of script
t=0:100;
y=sin(2*pi*t/20);
figure;
plot(t,y);
dummy = RoutineThatDoesPlotting(t,y);
..... % end of script
function dummy = RoutineThatDoesPlotting(t,y)
figure;
plot(t,y);
dummy=1;
% end of function
It's possible that your code doesn't work sometimes because your function RountineThatDoesPlotting is getting called too quickly before the system could update the "current figure". It could be just a timing thing; sometimes it works, sometimes it doesn't. That's another reason why you shouldn't use gcf that way.
Vedere anche
Categorie
Scopri di più su Migrate GUIDE Apps in Help Center e File Exchange
Prodotti
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!