开发者

Producing subplots and then combine them into a figure later in MATLAB

开发者 https://www.devze.com 2023-01-21 22:55 出处:网络
My program produces small figures during the command cycle. Is there a way to just save t开发者_运维问答hese figures and then combine them in one figure later?Consider the code:

My program produces small figures during the command cycle. Is there a way to just save t开发者_运维问答hese figures and then combine them in one figure later?


Consider the code:

hFig = figure;

%# create temporary subplots as template
for i=1:2, h(i) = subplot(2,1,i); end       %# create subplots
pos = get(h, 'Position');                   %# record their positions
delete(h)                                   %# delete them

%# load the .fig files inside the new figure
fileNames = {'a.fig' 'b.fig'};              %# saved *.fig file names
for i=1:2
    %# load fig
    hFigFile = hgload( fileNames{i} );

    %# move/copy axis from old fig to new fig
    hAx = get(hFigFile, 'Child');           %# hAx = gca;
    set(hAx, 'Parent',hFig)
    %#hAx = copyobj(hAx,hFig);

    %# resize it to match subplot position
    set(hAx, 'Position',pos{i});

    %# delete old fig
    delete(hFigFile)
end

This was adapted from this newsgroup discussion


Use saveas. Save your subplot as a FIG file so you have complete control over it later (as opposed to a JPG).

Choose a tiling pattern and then use subplot to display multiple figures in one.


I have an answer here as an example:

h1 = figure(1)
plot(1:10,'o-r');
title('title');
xlabel('xlabel');
ylabel('ylabel');

% Copy contents
ch(1) = copyobj(gca,gcf);

% Figure 2
h2 = figure(2)
plot(1:30,'o-r');
title('title fig2');
xlabel('xlabel');
ylabel('ylabel');
% copy contents
ch(2) = copyobj(gca,gcf);

figure(3)
sh = subplot(1,2,1);
clear axes
p = get(sh,'position');
ah = copyobj(ch(1),gcf);
set(ah,'position',p);

% Create axis template
sh = subplot(1,2,2);
clear axes
p = get(sh,'position');
ah = copyobj(ch(2),gcf);
set(ah,'position',p);

% Delete template
% delete(sh);


Amro's solution works greatly, but with boxplots you have to reset the Xtick and Xtick labels, otherwise, for some reason, they will not be resized according to the the subplot. When you create the boxplot or after opening the figure add:

set(gca,'XTick',<1d vector>,'XTickLabel',<1d cell vector>)

or put automatic ticks and labels

set(gca,'XTickMode','auto','XTickLabelMode','auto')
0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号