MATLAB Answers

How to Plot Numbers on top of Bar graphs?

1.343 views (last 30 days)
Assume we have this as data
Y=[198 138 172 188 190 192];
bar(Y);
How would I go about plotting the Y-values of each of the bars on top of the bars? So each bar would show its value on top of it.

  0 Comments

Sign in to comment.

Accepted Answer

Chad Greene
Chad Greene on 7 Aug 2017
Edited: Chad Greene on 7 Aug 2017
Use the text function like this:
Y=[198 138 172 188 190 192];
bar(Y);
text(1:length(Y),Y,num2str(Y'),'vert','bottom','horiz','center');
box off

  3 Comments

Ibro Tutic
Ibro Tutic on 7 Aug 2017
Nice answer! If we are working with grouped bar graphs i.e.
y = [2 2 3; 2 5 6; 2 8 9; 2 11 12];
bar(y)
Could this be applied in this case?
alankrita  asthana
alankrita asthana on 16 Nov 2017
hi @chad greene. i am trying to use the same command to display the Y values on top of my bar graph. it isnt working. kindly help
Chad Greene
Chad Greene on 20 Nov 2017
The phrase "it isn't working" does not contain enough information to help. I suggest reading this, then start another question with specifics about the issue you're having.

Sign in to comment.

More Answers (2)

Johannes Stoerkle
Johannes Stoerkle on 21 Feb 2020
Edited: Johannes Stoerkle on 21 Feb 2020
As an extension, I found a good approach if one wants to plot the number on the top of bars, which are displayed in several groups. Therefore, I estimate the correction for the text x-Position using an exp-function, which is fitted to my empirical results.
For instance. If you consider 3 categories and 7 different models (determined in first line) it results:
dataSample = reshape([36 2:21],3,7)';
figure
catStrArray = {'category1','category2','category3'};
catArray = categorical(catStrArray);
catArray = reordercats(catArray,catStrArray);
bar(catArray,dataSample')
nModel = size(dataSample,1);
nCat = size(dataSample,2);
xPosAmpl = 0.3682626-0.3298725*exp(-0.407004*(nModel-1)); % position amplitude
xPosInc = 2*xPosAmpl/(nModel-1);
modelNames = [];
for idxModel=1:nModel
bar_xPos = 1:nCat;
if nModel~=1
bar_xPos = bar_xPos-xPosAmpl+(idxModel-1)*xPosInc;
end
text(bar_xPos,dataSample(idxModel,:),num2str(dataSample(idxModel,:)',...
'%0.0f'),'vert','bottom','horiz','center');
modelNames{idxModel}=sprintf('model%d',idxModel);
end
legend(modelNames)

  0 Comments

Sign in to comment.


Soyeun Jung
Soyeun Jung on 7 Aug 2017
Hi Ibro, you can run this line of code to display the y-values on top of each bar. See the attached link for related information. https://ch.mathworks.com/matlabcentral/answers/40629-bar-plot-value-on-top
text([1:length(Y)], Y', num2str(Y','%0.2f'),'HorizontalAlignment','center','VerticalAlignment','bottom')

  0 Comments

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!

Translated by