How to create an overall legend for subplots with the SUBAXIS function?

3 views (last 30 days)
Sim
Sim on 22 Apr 2022
Commented: Sim on 22 Apr 2022
Hi, how can I create an overall legend by using the subaxis function?
The following example does not work:
x = -10:10;
city = {'London', 'Paris', 'Berlin','Madrid'};
season = {'summer','winter'};
colors = {'blue','red','black','magenta'};
for i = 1 : 4
subaxis(2,2,i);
y1 = (rand(1,21)-0.5)*20;
y2 = (rand(1,21)-0.5)*10;
hold on
p1(i) = plot(x, y1, 'Color', colors{i}, 'LineStyle','--');
p2(i) = plot(x, y2, 'Color', colors{i}, 'LineStyle','-');
hold off
p1(i).DisplayName = [city{i} ', ' season{1}];
p2(i).DisplayName = [city{i} ', ' season{2}];
end
lgd = legend;
lgd.Position = 'northeastoutside';

Accepted Answer

Matt J
Matt J on 22 Apr 2022
Edited: Matt J on 22 Apr 2022
x = -10:10;
city = {'London', 'Paris', 'Berlin','Madrid'};
season = {'summer','winter'};
colors = {'blue','red','black','magenta'};
for i = 1 : 4
ax(i)=subaxis(2,2,i);
y1 = (rand(1,21)-0.5)*20;
y2 = (rand(1,21)-0.5)*10;
hold on
p1(i) = plot(x, y1, 'Color', colors{i}, 'LineStyle','--');
p2(i) = plot(x, y2, 'Color', colors{i}, 'LineStyle','-');
hold off
p1(i).DisplayName = [city{i} ', ' season{1}];
p2(i).DisplayName = [city{i} ', ' season{2}];
end
for i=1:4
ax(i).Position([1,3])=ax(i).Position([1,3])*0.8; %make room for legend
end
lgd = legend;
lgd.Position(1:2)=[0.75,0.4];
  3 Comments
Sim
Sim on 22 Apr 2022
Oh, solved..!!
Your solution works well, I just had an annotation, and the "EdgeColor" of the annotation was still "black" (the default color)....
I solved it just by setting "EdgeColor" as "none", as shown here:
annotation('textbox','String',str,...
'Position',ax(i).Position,...
'EdgeColor','none');

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!