Area plot common legend

4 views (last 30 days)
Hasan Isomitdinov
Hasan Isomitdinov on 29 Jan 2019
Commented: Star Strider on 29 Jan 2019
Hi!
I am trying to plot my data with an area plot and I have several subplots for several countries. I just wanted to know how to set a common legend for all subplots describing each color of the plot. Thanks!
  2 Comments
Luna
Luna on 29 Jan 2019
What have you done so far?
Hasan Isomitdinov
Hasan Isomitdinov on 29 Jan 2019
figure(1)
for i=1:11
subplot(4,3,i)
area(dates,[global(:,i),regional(:,i),local(:,i)],'FaceColor','flat')
a11 = sprintf('%s',country{i});
title(a11);
legend({'World','Regional','Local'},'Location','SouthOutside');
end
But this is giving me a legend for each plot separately.

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 29 Jan 2019
Some version of this idea could work:
dates = 1:5; % Create Data
G = rand(5, 11); % Create Data
R = rand(5, 11); % Create Data
L = rand(5, 11); % Create Data
country = num2cell('A'+(0:10)); % Create Data
figure(1)
for i=1:12
if i < 12
subplot(4,3,i)
area(dates,[G(:,i),R(:,i),L(:,i)],'FaceColor','flat')
a11 = sprintf('%s',country{i});
title(a11);
elseif i == 12
subplot(4,3,i)
i = 11;
area(dates,[G(:,i),R(:,i),L(:,i)],'FaceColor','flat')
set(gca,'Position',[7.5 1.25 1 1]*0.1)
set(gca, 'Visible','off')
legend({'World','Regional','Local'},'Location','best');
end
end
Run this first. (I am using R2018b.)
Then experiment with your own data to get the result you want.
  2 Comments
Hasan Isomitdinov
Hasan Isomitdinov on 29 Jan 2019
Thank you for your response!
Here is a little tweaked version I opted for instead which is giving me the result I wanted with a row legend underneath the figure. Any suggestions on optimizing this line would still be appreciated.
clear all;
dates = 1:5; % Create Data
G = rand(5, 11); % Create Data
R = rand(5, 11); % Create Data
L = rand(5, 11); % Create Data
country = num2cell('A'+(0:10)); % Create Data
figure(1)
for i=1:11
subplot(4,4,i)
area(dates,[G(:,i),R(:,i),L(:,i)],'FaceColor','flat')
a11 = sprintf('%s',country{i});
title(a11);
end
legend=columnlegend(3,{'World','Regional','Country-specific'});
set(legend,'Position',[1.1 1.3 7 1]*0.1);
Star Strider
Star Strider on 29 Jan 2019
My pleasure.
I cannot run that because the ‘columnlegend’ variable does not exist in the code you posted. Also, ‘columnlegend’ is not a MATLAB function.
If my Answer helped you solve your problem, please Accept it!

Sign in to comment.

More Answers (0)

Products


Release

R2018a

Community Treasure Hunt

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

Start Hunting!