Add error bars in bar graph

10 views (last 30 days)
Luana Machado Simao
Luana Machado Simao on 14 Jan 2020
Edited: Adam Danz on 10 Dec 2021
Hi! I am trying to add the error bars in my chart but I do not know how to do it...
>> y = [9862.5 5238 3845.2; 9368.6 3515 3625.7; 11064 6810 4073.6; 12599.2 5701 3955.3; 10114.4 5683 3664.5];
>> b = bar(y,'FaceColor', 'flat');
>> set (gca, 'XTickLabel',{ 'Pronghorn', 'Settler CL', 'Robidoux', 'LCS Chrome', 'Warhorse'})
>> for k = 1:size(y,2)
b(k).CData = k;
end;
this is the code for my chart.
And these are the std error:
1699.5 , 612.157 , 548.048
Thank you!
  2 Comments
Luana Machado Simao
Luana Machado Simao on 14 Jan 2020
I tried one of the codes but that is what happen:
>> count = [9862.5 5238 3845.2; 9368.6 3515 3625.7; 11064 6810 4073.6; 12599.2 5701 3955.3; 10114.4 5683 3664.5];
errLim = [1699.5 612.157 548.048];
err = errLim - count;
figure;
bar(count)
hold on
errorbar(1:length(count), [9862.5 5238 3845.2; 9368.6 3515 3625.7; 11064 6810 4073.6; 12599.2 5701 3955.3; 10114.4 5683 3664.5], err(1,:), err(2,:), 'LineStyle','none')
set(gca, 'xtick', 1:length(count), 'xticklabel', {'Pronghorn', 'Settler CL', 'Robidoux', 'LCS Chrome', 'Warhorse'});
Error using errorbar>checkSingleInput (line 270)
XData must be the same size as YData.
Error in errorbar (line 94)
x = checkSingleInput(x, sz, 'XData');
>> end;

Sign in to comment.

Accepted Answer

Adam Danz
Adam Danz on 14 Jan 2020
Edited: Adam Danz on 10 Dec 2021
Here's a demo you can follow to add error bars to a grouped bar chart.
To center the errorbar on each bar, you need to compute their center points along the x axis.
In Matlab R2019B or later the bar center points are stored in
h = bar(__);
h.XEndPoints % x centers
Prior to Matlab R2019B, use an undocumented property XOffset explained here.
Required inputs are
  • count: an n x m matrix that will produce n groups each containing m bars.
  • err: an n x m matrix that defines the error for each bar
% Create bar data
count = [9862.5 5238 3845.2; 9368.6 3515 3625.7; 11064 6810 4073.6; 12599.2 5701 3955.3; 10114.4 5683 3664.5];
% Create error data (using random data for this demo)
err = (rand(size(count))+2)*100;
% Plot bars
figure;
h = bar(count);
% Get x centers; XOffset is undocumented
xCnt = (get(h(1),'XData') + cell2mat(get(h,'XOffset'))).';
% Add errorbars
hold on
errorbar(xCnt(:), count(:), err(:), err(:), 'k', 'LineStyle','none')
% or
% errorbar(xCnt(:), count(:), err(:), 'LineStyle','none')
Alternatively, if you're working with error intervals that define the upper and lower bounds of error,
Required inputs are
  • count: an n x m matrix that will produce n groups each containing m bars.
  • errUpperBound: an n x m matrix that defines the upper bound of error for each bar
  • errLowerBound: an n x m matrix that defines the lower bound of error for each bar
% Create bar data
count = [9862.5 5238 3845.2; 9368.6 3515 3625.7; 11064 6810 4073.6; 12599.2 5701 3955.3; 10114.4 5683 3664.5];
% Create upper and lower error bounds
errUpperBound = count + 200;
errLowerBound = count - 100;
% Compute the error distance in the neg & pos directions
errNeg = count - errLowerBound;
errPos = errUpperBound - count;
% plot error bar
errorbar(xCnt(:), count(:), errNeg(:), errPos(:), 'k', 'LineStyle','none')
  4 Comments
Luana Machado Simao
Luana Machado Simao on 14 Jan 2020
Sorry I didn't see my mistake there. So I have the 15 bars:
count = [9862.5 5238 3845.2; 9368.6 3515 3625.7; 11064 6810 4073.6; 12599.2 5701 3955.3; 10114.4 5683 3664.5];
So, for example, for "9862.5", the error range is: 6240.0 to 13485.0
for "5238": 3933.2 to 6542.8
and so on...
how can I add this values for each bar in this line?
err = (rand(size(count))+2)*100;
thank you! :)
Adam Danz
Adam Danz on 14 Jan 2020
See the bottom of my updated answer.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!