Copy legends while superimposing two .fig files

3 次查看(过去 30 天)
I would like to copy the legends from the original figure f1 & f2 to the newly superimposed image.
I'm trying the below code but it does not code correctly.
GM_req =[2 8 9 19 22 32 34 38];
for i=1:length(GM_req)
% Load figure from Upper bound
figname=strcat('.\SMRF-50y-C4-Col-PZ-Beam-stress-UB\UB_GM_',num2str(GM_req(i)),'.fig');
f1=openfig(figname,'invisible');
hold on
% Load figure from Lower bound
figname=strcat('.\SMRF-50y-C4-Col-PZ-Beam-stress-LB\LB_GM_',num2str(GM_req(i)),'.fig');
f2=openfig(figname,'invisible');
figure
ax1 = gca;
copyobj(allchild(get(f1, 'CurrentAxes')), ax1);
ax2 = axes('Position',get(ax1,'Position'));
copyobj(allchild(get(f2, 'CurrentAxes')), ax2);
set(ax2,'Color','none','XTick',[],'YTick',[]);
lb_fig = findall(f2,'Type','Line'); % get current figure handle
ub_fig = findall(f1,'Type','Line');; % find upper bound figure handle
lb_legend = legend(ax1, [ub_fig(1), lb_fig(1)]);
close(f1)
close(f2)
hold off
end

回答(1 个)

Rasmita
Rasmita 2023-4-12
Hi Devang,
It is my understanding that, you are creating a new figure from each pair of upper and lower bound figures and trying to copy the legends from the original figures to the newly created superimposed figures.
For this you need to extract the legend object from the original figures and add it to the new figure. Here is a modified version of your code that should work:
GM_req = [2 8 9 19 22 32 34 38];
for i = 1:length(GM_req)
% Load figure from Upper bound
figname = strcat('.\SMRF-50y-C4-Col-PZ-Beam-stress-UB\UB_GM_',num2str(GM_req(i)),'.fig');
f1 = openfig(figname, 'invisible');
hold on
% Load figure from Lower bound
figname = strcat('.\SMRF-50y-C4-Col-PZ-Beam-stress-LB\LB_GM_',num2str(GM_req(i)),'.fig');
f2 = openfig(figname, 'invisible');
% Copy plot objects to new figure
figure
ax1 = gca;
copyobj(allchild(get(f1, 'CurrentAxes')), ax1);
ax2 = axes('Position', get(ax1, 'Position'));
copyobj(allchild(get(f2, 'CurrentAxes')), ax2);
set(ax2, 'Color', 'none', 'XTick', [], 'YTick', []);
% Copy legend objects to new figure
lb_legend = findobj(f2, 'Type', 'Legend');
ub_legend = findobj(f1, 'Type', 'Legend');
new_legend = copyobj([lb_legend, ub_legend], gcf);
set(new_legend, 'Location', 'best');
% Close original figures
close(f1)
close(f2)
hold off
end
This code finds the legend objects in the original figures using the ‘findobj’ function, copies them to the new figure using the ‘copyobj’ function, and sets the location of the new legend to "best" using the ‘set’ function.
For more information, please refer below documentations:
Hope this helps!
Regards,
Rasmita

类别

Help CenterFile Exchange 中查找有关 Migrate GUIDE Apps 的更多信息

Community Treasure Hunt

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

Start Hunting!

Translated by