error in handle when save multiple figures

6 views (last 30 days)
JING JIAO
JING JIAO on 14 Aug 2019
Commented: JING JIAO on 11 Sep 2019
I am running a loop to save multiple figures, in one loop the figure is coded as:
subplot(4,3,1)
plot(1:timesteps,S_RT(1:timesteps),'-b');
where S_RT(1:timesteps) is a variable that changes every loop.
then I save this graph as the following where i, jj, k and h indicate the four nested loop:
filename = sprintf('Tran_RT %d vs Tran_WT %d vs Mig %d vs Grow %d.png',i,jj,k,h);
saveas(gcf,filename);
clf;
It sometimes shows error as:
Error using checkArgsForHandleToPrint
Handle input argument contains nonhandle values.
Error in checkArgsForHandleToPrint
Error in print>LocalCreatePrintJob (line 100)
handles = checkArgsForHandleToPrint(0, varargin{:});
Error in print (line 38)
[pj, inputargs] = LocalCreatePrintJob(varargin{:});
Error in saveas (line 181)
print( h, name, ['-d' dev{i}] )
Is that due to I used "subplot"? How can I handle this issue? Thanks in advance.
  2 Comments
Walter Roberson
Walter Roberson on 14 Aug 2019
I would suspect that the clf is getting executed before the saveas() has finished. You might need a pause() to get the saveas() time to execute.
JING JIAO
JING JIAO on 11 Sep 2019
Thanks, this is what I did, it worked.

Sign in to comment.

Answers (2)

Shashank Gupta
Shashank Gupta on 26 Aug 2019
If we look at the error
Handle input argument contains non handle values
A non-handle value is passed when it expected a handle, that in turn is caused by "saveas" function.
The input argument to this function may not be handle anymore. Although you are using clf command to remove the figure, it shouldn’t have caused the problem as clf only remove the graphical content of the figure. Try looking at your code and see if you are removing the figure window as well because that will remove the handle and thus triggered the error. You can also try putting a breakpoint at "saveas" function and run the code. At the breakpoint inspect the values that are passed to "saveas" and check if the proper handle is passed.

Walter Roberson
Walter Roberson on 11 Sep 2019
I would suspect that the clf is getting executed before the saveas() has finished. You might need a pause() to get the saveas() time to execute.
  1 Comment
JING JIAO
JING JIAO on 11 Sep 2019
Thanks. I do put pause before and after clf, it works now.

Sign in to comment.

Categories

Find more on Printing and Saving in Help Center and File Exchange

Community Treasure Hunt

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

Start Hunting!