Add error bars in bar graph

65 vues (au cours des 30 derniers jours)
Luana Machado Simao
Luana Machado Simao le 14 Jan 2020
Modifié(e) : Adam Danz le 10 Déc 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 commentaires
Luana Machado Simao
Luana Machado Simao le 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;

Connectez-vous pour commenter.

Réponse acceptée

Adam Danz
Adam Danz le 14 Jan 2020
Modifié(e) : Adam Danz le 10 Déc 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 commentaires
Luana Machado Simao
Luana Machado Simao le 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 le 14 Jan 2020
See the bottom of my updated answer.

Connectez-vous pour commenter.

Plus de réponses (0)

Catégories

En savoir plus sur Data Distribution Plots dans Help Center et File Exchange

Community Treasure Hunt

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

Start Hunting!

Translated by