How to put a legend outside of a tiled layout graph?

8 views (last 30 days)
I am trying to create some graphs, and I am struggling to put the legend where I want it in my graph. I would like my graph to look like this:
However, the code that i have wrtiien:
%%% plot mean and SD:
s = sprintf('[%c]', char(176)); % degree angle symbol
figure
title('Mean and SD')
ax1=subplot(4,1,1);
fontsize=get(ax1, 'FontSize');
title('Start')
hold on
[m,n] = size(DATA1start);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA1start',2,'MarkerFaceColor',"#228b22",'MarkerEdgeColor',"#228b22", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)
[m,n] = size(DATA2start);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA2start',2,'MarkerFaceColor',"#395dc7",'MarkerEdgeColor',"#395dc7", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)%stdshade(DATA2start','0.3','b')
hold on
[m,n] = size(DATA3start);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA3start',2,'MarkerFaceColor',"#f88f09",'MarkerEdgeColor',"#f88f09", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)
hold on
scatter(1:101,mean(DATA1start','omitnan'),10,'MarkerFaceColor',"#228b22",'MarkerEdgeColor',"#228b22")
hold on
scatter(1:101,mean(DATA2start','omitnan'),10,'MarkerFaceColor',"#395dc7",'MarkerEdgeColor',"#395dc7")
hold on
scatter(1:101,mean(DATA3start','omitnan'),10,'MarkerFaceColor',"#f88f09",'MarkerEdgeColor',"#f88f09")
ylabel(['Angular Difference', s])
xlabel(['Percentage of gait cycle (%)'])
xlim([0 100])
ylim([0 60])
% Create fake points for the legend
hFakeDATA1 = plot(NaN, NaN, 'o', 'MarkerFaceColor', "#228b22", 'MarkerEdgeColor', "#228b22", 'MarkerSize', 5);
hFakeDATA2 = plot(NaN, NaN, 'o', 'MarkerFaceColor', "#395dc7", 'MarkerEdgeColor', "#395dc7", 'MarkerSize', 5);
hFakeDATA3 = plot(NaN, NaN, 'o', 'MarkerFaceColor', "#f88f09", 'MarkerEdgeColor', "#f88f09", 'MarkerSize', 5);
% Create fake entry for the shaded region
hShadedRegion = plot(NaN, NaN, 's', 'MarkerFaceColor', [0.7 0.7 0.7], 'MarkerEdgeColor', 'none', 'MarkerSize', 8);
% Create custom legend with the fake points
legend([hFakeDATA1, hFakeDATA2, hFakeDATA3, hShadedRegion], ...
{'DATA1', 'DATA2', 'DATA3', 'Main effect of group'}, 'Location', 'bestoutside');
subplot(4,1,2)
title('Middle')
hold on
[m,n] = size(DATA1middle);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA1middle',2,'MarkerFaceColor',"#228b22",'MarkerEdgeColor',"#228b22", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)
[m,n] = size(DATA2middle);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA2middle',2,'MarkerFaceColor',"#395dc7",'MarkerEdgeColor',"#395dc7", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)%stdshade(DATA2start','0.3','b')
hold on
[m,n] = size(DATA3middle);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA3middle',2,'MarkerFaceColor',"#f88f09",'MarkerEdgeColor',"#f88f09", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)
hold on
scatter(1:101,mean(DATA1middle','omitnan'),10,'MarkerFaceColor',"#228b22",'MarkerEdgeColor',"#228b22")
hold on
scatter(1:101,mean(DATA2middle','omitnan'),10,'MarkerFaceColor',"#395dc7",'MarkerEdgeColor',"#395dc7")
hold on
scatter(1:101,mean(DATA3middle','omitnan'),10,'MarkerFaceColor',"#f88f09",'MarkerEdgeColor',"#f88f09")
ylabel(['Angular Difference', s])
xlabel(['Percentage of gait cycle (%)'])
xlim([0 100])
ylim([0 60])
subplot(4,1,3)
title('End')
hold on
[m,n] = size(DATA1last);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA1last',2,'MarkerFaceColor',"#228b22",'MarkerEdgeColor',"#228b22", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)
[m,n] = size(DATA2last);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA2last',2,'MarkerFaceColor',"#395dc7",'MarkerEdgeColor',"#395dc7", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)%stdshade(DATA2start','0.3','b')
hold on
[m,n] = size(DATA3last);
xaxis=repmat(1:101, n, 1);
scatter(xaxis,DATA3last',2,'MarkerFaceColor',"#f88f09",'MarkerEdgeColor',"#f88f09", 'MarkerFaceAlpha',.3,'MarkerEdgeAlpha',.3)
hold on
scatter(1:101,mean(DATA1last','omitnan'),10,'MarkerFaceColor',"#228b22",'MarkerEdgeColor',"#228b22")
hold on
scatter(1:101,mean(DATA2last','omitnan'),10,'MarkerFaceColor',"#395dc7",'MarkerEdgeColor',"#395dc7")
hold on
scatter(1:101,mean(DATA3last','omitnan'),10,'MarkerFaceColor',"#f88f09",'MarkerEdgeColor',"#f88f09")
ylabel(['Angular Difference', s])
xlabel(['Percentage of gait cycle (%)'])
xlim([0 100])
ylim([0 60])
Provides me with the graph shown here. I can't seem to put the legend in the correct place ( I have moved the block of code around to create the legend before and after each graph, but with no success). I would like the legend to be outside of all the tiles! Any advice would be much appreciated :)

Answers (1)

Matt J
Matt J on 24 Mar 2025
Edited: Matt J on 24 Mar 2025
TL=tiledlayout(4,1); %Outer Layout
tl=tiledlayout(TL,3,1); %Inner Layout -- child of TL
tl.Layout.Tile=1;
tl.Layout.TileSpan=[3,1];
nexttile(tl); plot(rand(5,2)); title 'Outer 1 - Inner 1'
nexttile(tl); plot(rand(5,2)); title 'Outer 1 - Inner 2'; leg=legend; leg.Layout.Tile="East";
nexttile(tl); plot(rand(5,2)); title 'Outer 1 - Inner 3'
nexttile(TL);
plot(rand(5,4),'x--'); title 'Outer 2'

Products


Release

R2024a

Community Treasure Hunt

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

Start Hunting!