10

I am trying to create a figure of subplots. I don't want the subplots to have legends but instead the figure to have an overall legend.

I read that it is possible either by adding a legend only to the last subplot and adjusting its location in the figure through the position feature of legend or by using one subplot figure position (e.g. subplot(2,3,5.5) only for displaying the legend). I would prefer the second option although I haven't succeeded up until now. Any help?

Here is my code:

SLS=figure();
hold on
subplot(3,2,1);
plot(t,u{1},t,u{2},t,u{3},t,u{4},t,u{5},t,u{6});
title('SLS Levels');
subplot(3,2,2);
plot(t,log_u{1},t,log_u{2},t,log_u{3},t,log_u{4},t,log_u{5},t,log_u{6});
title('SLS Logarithms');
subplot(3,2,3);
plot(t,I_u{1},t,I_u{2},t,I_u{3},t,I_u{4},t,I_u{5},t,I_u{6});
title('SLS Levels with Intercept');
subplot(3,2,4);
plot(t,log_I_u{1},t,log_I_u{2},t,log_I_u{3},t,log_I_u{4},t,log_I_u{5},t,log_I_u{6});
title('SLS Log. with Intercept');
subplot(3,2,5.5);
legend('GDP', 'C', 'I', 'G', 'Imp.', 'Exp.');
axis off
Sardar Usama
  • 19,536
  • 9
  • 36
  • 58
Whitebeard13
  • 411
  • 1
  • 7
  • 17

1 Answers1

32

Code:

% Plotting some random data and storing their handles
subplot(3,2,1);       h1 = plot(randperm(10),randperm(10),'ko-');
subplot(3,2,2);       h2 = plot(randperm(10),randperm(10),'g+-');
subplot(3,2,3);       h3 = plot(randperm(10),randperm(10),'md-');
subplot(3,2,4);       h4 = plot(randperm(10),randperm(10),'rv-.');

hL = subplot(3,2,5.5);
poshL = get(hL,'position');     % Getting its position

lgd = legend(hL,[h1;h2;h3;h4],'RandomPlot1','RandomPlot2','RandomPlot3','RandomPlot4');
set(lgd,'position',poshL);      % Adjusting legend's position
axis(hL,'off');                 % Turning its axis off

Output:

enter image description here

Sardar Usama
  • 19,536
  • 9
  • 36
  • 58
  • 2
    My take-away from this is that you can have `0.5` increments in subplots, didn't know that! Neat solution. – Wolfie Sep 10 '17 at 22:57
  • 2
    I'd add that the first argument of `subplot()` must be an integer, but the others evidently don't have to be! – jvriesem Oct 10 '18 at 19:42