MATLAB Answers

error in handle when save multiple figures

51 ビュー (過去 30 日間)
JING JIAO
JING JIAO 2019 年 8 月 14 日
コメント済み: JING JIAO 2019 年 9 月 11 日
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 件のコメント

Walter Roberson
Walter Roberson 2019 年 8 月 14 日
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 2019 年 9 月 11 日
Thanks, this is what I did, it worked.

サインイン to comment.

回答 (2 件)

Shashank Gupta
Shashank Gupta 2019 年 8 月 26 日
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.

  0 件のコメント

サインイン to comment.


Walter Roberson
Walter Roberson 2019 年 9 月 11 日
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 件のコメント

JING JIAO
JING JIAO 2019 年 9 月 11 日
Thanks. I do put pause before and after clf, it works now.

サインイン to comment.

サインイン してこの質問に回答します。


Translated by