Change values above bar
Show older comments
Hello all,
I am creating several bar charts and would like to indicate the value above each bar. Unfortunately, this value varies very often and I have to edit each chart individually. If I do not do this, the chart looks like this:

Is there a way to automatically scale the axes so that there is enough space for the value to still be displayed above the bar? Is there also a function so that the values are above the bar for positive numbers and below the bar for negative numbers? I always change this in the function itself with "top" or "bottom".
Many thanks in advance!
Accepted Answer
More Answers (1)
This should work with positive or negative values.
y = [5 10 15 100 150 200];
%y = [y -y];
hb = bar(y,0.4);
xtips = hb.XEndPoints;
ytips = hb.YEndPoints;
barlabels = string(hb.YData);
ht = text(xtips,ytips,barlabels,'HorizontalAlignment','center',...
'VerticalAlignment','bottom');
if any(y < 0)
% flip the labels on negative bars
for k = 1:numel(ht)
if y(k) < 0
ht(k).VerticalAlignment = 'top';
end
end
% get the bot edge of the lowest label
% add 2% just for some extra padding
[~,mnidx] = min(y);
ymin = ht(mnidx).Extent(2)*1.02;
else
% set the ylimit
yl = ylim();
ymin = yl(1);
end
% get the top edge of the highest label
% add 2% just for some extra padding
[~,mxidx] = max(y);
ymax = sum(ht(mxidx).Extent([2 4]))*1.02;
% set the ylimit
ylim([ymin ymax])
Categories
Find more on Axes Appearance in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!

