MATLAB: How to save an axes within a GUI to a .fig

guiguidehandlesmatlab guisavesaveas

When I try this:
[FileName,PathName] = uiputfile;
saveDataName = fullfile(PathName,FileName);
saveas(handles2.axes9,saveDataName);
It saves a file, but when I open the file, it is just another GUI. It is saving an iteration of my GUI when I only want it to save "handles2.axes9" to a ".fig" Help?

Best Answer

This might work. You create a new (temporary and invisible) figure, and then use COPYOBJ to copy that axes to the new figure. You could then save the new figure to a FIG file (here "test.fig").
%%1. Make sample figure
handles.f = figure;
handles.axes1 = subplot(211);
handles.axes2 = subplot(223);
handles.axes3 = subplot(224);
plot(handles.axes1,rand(5));
imagesc(handles.axes2,rand(10,10));
title(handles.axes2, 'My IMAGESC');
xlabel(handles.axes2,'X values');
ylabel(handles.axes2,'Y values');
surf(handles.axes3,peaks);
%%2. Copy axes to new figure and save
outputFileName = 'test.fig';
fignew = figure('Visible','off'); % Invisible figure
newAxes = copyobj(handles.axes2,fignew); % Copy the appropriate axes
set(newAxes,'Position',get(groot,'DefaultAxesPosition')); % The original position is copied too, so adjust it.
set(fignew,'CreateFcn','set(gcbf,''Visible'',''on'')'); % Make it visible upon loading
savefig(fignew,'test.fig');
delete(fignew);
If there is a colorbar, you'll need to do some extra work (you have to copy that as well using COPYOBJ since it is not a child of the axes).