Legend option and numbering in boxes

2 views (last 30 days)
y1 = [85 83 82 87; 81 79 84 86; 82 81 89 87; 89 85 87 80; 90 91 85 87];
figure(1), bar(y1,'stacked'); labels = arrayfun(@(value) [num2str(value,'%2.2f'),'%'],y1,'UniformOutput',false);
xticklabels({'NB','BLR','MLP','J48','CART'}); ylabel('\bfAccuracy in %','color','b');
ax = gca;darkGreen = [1,0,1]; ax.XColor = darkGreen; ax.XAxis.FontSize = 10; ax.YAxis.FontSize = 10; ax.FontWeight = 'bold'; hold off
legend({'2500 Dataset','5000 Dataset','7500 Dataset','10000 Dataset'}),legend boxoff
%% I need legend in 2X2 lines (i.e., 2 Rows & 2 Columns) AND values of y1 should be labled inside the corresponding box

Accepted Answer

Simon Chan
Simon Chan on 23 Jul 2021
Try the following:
y1 = [85 83 82 87; 81 79 84 86; 82 81 89 87; 89 85 87 80; 90 91 85 87];
figure(1),
b = bar(y1,'stacked');
labels = arrayfun(@(value) [num2str(value,'%2.2f'),'%'],y1,'UniformOutput',false);
xticklabels({'NB','BLR','MLP','J48','CART'});
ylabel('\bfAccuracy in %','color','b');
%
for k = 1:4
xtips1 = b(k).XEndPoints;
ytips1 = b(k).YEndPoints;
labels1 = string(b(k).YData);
text(xtips1,ytips1,labels1,'HorizontalAlignment','center',...
'VerticalAlignment','cap')
end
ax = gca;
darkGreen = [1,0,1];
ax.XColor = darkGreen;
ax.XAxis.FontSize = 10;
ax.YAxis.FontSize = 10;
ax.FontWeight = 'bold';
hold off
legend({'2500 Dataset','5000 Dataset','7500 Dataset','10000 Da,taset'},'NumColumns',2),legend boxoff
  1 Comment
MINATI PATRA
MINATI PATRA on 24 Jul 2021
Dear Simon
Good work
But it is not working in 2016b version perhaps.
Any modification can conclude my work.

Sign in to comment.

More Answers (1)

Yazan
Yazan on 23 Jul 2021
You can define the number of columns in the legend object using the property NumColumns. Use the following:
legend({'2500 Dataset','5000 Dataset','7500 Dataset','10000 Dataset'}, 'NumColumns', 2, 'Box', 'off')

Community Treasure Hunt

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

Start Hunting!