How to add a legend to all open figures?
14 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Morning everyone, I am struggling to reintroduce a legend to all open figures. I have seen a post about how to create a function that accesses the open figure handles, I cannot get it to work.
Below is the code, it essentially creates a tight subplot and then splits it into individual plots (21), these ones are the ones I want to add a legend to. If I appy a legend in the tight subplot (per one) it will distort the imagine and subsquent split. There is a function "Sub_Fig_Divider" that I have also attached with the correction applied.
Any help would be appreciated
Thanks
Richard
fh = figure();
fh.WindowState = 'maximized';
Water_levels = string([{'Low','Med','High'}]); %WL
Cell_ID = string(["Crest", "Av","B","Cv","Ah","Ch","Toe"]);
line_colour = string([{'b-','g-','r-'}]);
Y_units = string(["m","m","m","","","",""]);
soil_consit = "HSMC";
analysis = "Cum. mean period";
headers = ["XDisp", "YDisp", "XY Disp", "XStrain", "YStrain", "XYShearStrain", "DevStrain"];
load'Pd_cum_sum_excel_reorg_2.mat';
rows = size(Pd_cum_sum_excel_reorg_2,1);
columns = size(Pd_cum_sum_excel_reorg_2,2);
[ha,pos] = tight_subplot(rows,columns,[.15 .05],[.1 .1],[.05 .05]);
tot_count = rows*columns;
count =0 ;
row_count =0;
column_count =0;
for aa = 1:tot_count
set(gcf,'color','w')
if aa ==1
row_count = row_count +1;
column_count = column_count+1;
end
axes(ha(aa));
for bb = 1:size(Pd_cum_sum_excel_reorg_2{row_count,column_count},1)
x = 1:numel(Pd_cum_sum_excel_reorg_2{row_count,column_count}(bb,:));
y = Pd_cum_sum_excel_reorg_2{row_count,column_count}(bb,:);
hold on
plot(x,y)
hold off
end
%reset(gca) % Only for my computer
Y_lab = sprintf('%s %s', headers(column_count), Y_units(column_count));
ylabel(Y_lab,'fontName','Times','fontweight','bold','fontangle','italic');
xlabel('Periods','fontName','Times','fontweight','bold','fontangle','italic');
title_format_upper = sprintf('%s - %s',soil_consit,slope,char(176),analysis);
title_format_middle = sprintf('%s - %s',headers(column_count),upper(Water_levels(row_count)));
title_format_lower = sprintf('%s',Cell_ID(column_count));
title(({title_format_upper;title_format_middle;title_format_lower}),'fontName','Times','fontweight','normal','fontangle','italic', 'fontweight','bold');%'Interpreter', 'LaTeX');
if column_count <columns
column_count = column_count+1;
elseif column_count == columns
column_count = 1;
row_count = row_count + 1;
end
end
for aa =1:columns
linkaxes(ha(aa:columns:end),'xy');
end
%%
Sub_Fig_Divider %%%% This is a downloaded function (To work TH2=plot_new(ii-1) needs to be plot_new(ii-1) within code)
figHandles = findall(0,'Type','figure'); %open figures
GIU = figHandles(2:end); % Removes the orginal main subplot for the application below
%%Bit I am struggling on%%
for ii = 1:numel(GIU)
Lgd = legend(ax(ii),headers,'fontweight','bold','box','off','location','bestoutside');
title(lgd,'Water regime','fontweight','bold');
end
%% saving bit
0 commentaires
Réponse acceptée
Matt J
le 6 Avr 2021
Modifié(e) : Matt J
le 6 Avr 2021
For example,
%% Open several figures with subplots
for i=1:2
figure(i)
for j=1:2
subplot(2,1,j)
plot(rand(5,3));
end
end
%% Find all figures and subplots and add legend
H=findobj('Type','figure');
for i=1:numel(H)
ax=findobj(H(i),'Type','axes');
for j=1:numel(ax)
legend(ax(j));
end
end
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Annotations dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!