Using gcf in functions
Ältere Kommentare anzeigen
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
Akzeptierte Antwort
Weitere Antworten (1)
Jiro Doke
am 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.
1 Kommentar
David Koenig
am 21 Feb. 2012
Kategorien
Mehr zu Creating, Deleting, and Querying Graphics Objects finden Sie in Hilfe-Center und File Exchange
Produkte
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!