If I slightly modify the code; add ax=axes('Position',get(gca,'Position'),'Visible','Off'); and assigned p1, p2, etc. to the each plot. the plotting the last legend is done as: My_LGD = legend(ax, [p2 p3], {'Signal 1', 'Signal 2'});
X = rand(5);
Y = rand(5);
figure
tiledlayout(2,1);
nexttile
p1 = plot(X(1,:),Y(1,:), 'r'); hold on;
p2 = plot(X(2,:),Y(2,:), 'k'); hold on;
p3 = plot(X(3,:),Y(3,:), 'k--'); hold on;
legend('Reference', 'Location', 'NorthWest');
nexttile
p1 = plot(X(1,:),Y(1,:), 'r'); hold on;
p4 = plot(X(4,:),Y(4,:), 'k'); hold on;
p6 = plot(X(5,:),Y(5,:), 'k--'); hold on;
legend('Reference', 'Location', 'NorthWest');
ax=axes('Position',get(gca,'Position'),'Visible','Off');
My_LGD = legend(ax, [p2 p3], {'Signal 1', 'Signal 2'});
My_LGD.Orientation = "horizontal";
My_LGD.NumColumns = 4;
My_LGD.Layout.Tile = "South";
However, the My_LGD.Layout.Tile = "South"; gives an error:
Property assignment is not allowed when the object is empty.
Use subscripted assignment to create an array element.
Error in test (line 20)
My_LGD.Layout.Tile = "South";
It seems I can't get a global legend to appear outside the plot. Anyone knows what to do?