How do I place errorbars on my grouped bar graph using function ERRORBAR in MATLAB?
조회 수: 245 (최근 30일)
이전 댓글 표시
MathWorks Support Team
2011년 12월 16일
편집: MathWorks Support Team
2021년 3월 17일
I use the following to create a grouped bar graph:
model_series = [10 40 50 60; 20 50 60 70; 30 60 80 90];
model_error = [1 4 8 6; 2 5 9 12; 3 6 10 13];
bar(model_series, 'grouped');
hold on
errorbar( model_series,model_error)
The result is a grouped bar graph with error bars placed in between each group of bars:
I would like to have "errorbar" place error bars on the center of each bar.
채택된 답변
MathWorks Support Team
2021년 3월 17일
편집: MathWorks Support Team
2021년 3월 17일
The ability to specify that the "errorbar" function should display the error bars inside the patches is not available in MATLAB.
There are two work arounds for this limitation, usage of which depends on the release of MATLAB that you are using.
For R2019a or earlier releases:
Find the center of each bar and pass this data into "errorbar" with the respective error values.
% Example data
model_series = [10 40 50 60; 20 50 60 70; 30 60 80 90];
model_error = [1 4 8 6; 2 5 9 12; 3 6 10 13];
b = bar(model_series, 'grouped');
hold on
% Find the number of groups and the number of bars in each group
[ngroups, nbars] = size(model_series);
% Calculate the width for each bar group
groupwidth = min(0.8, nbars/(nbars + 1.5));
% Set the position of each error bar in the centre of the main bar
% Based on barweb.m by Bolu Ajiboye from MATLAB File Exchange
for i = 1:nbars
% Calculate center of each bar
x = (1:ngroups) - groupwidth/2 + (2*i-1) * groupwidth / (2*nbars);
errorbar(x, model_series(:,i), model_error(:,i), 'k', 'linestyle', 'none');
end
hold off
For R2019b or later releases:
Retrieve the x coordinate of each bar using the "XEndPoints" property and pass this data into "errorbar":
% Example data
model_series = [10 40 50 60; 20 50 60 70; 30 60 80 90];
model_error = [1 4 8 6; 2 5 9 12; 3 6 10 13];
b = bar(model_series, 'grouped');
hold on
% Calculate the number of groups and number of bars in each group
[ngroups,nbars] = size(model_series);
% Get the x coordinate of the bars
x = nan(nbars, ngroups);
for i = 1:nbars
x(i,:) = b(i).XEndPoints;
end
% Plot the errorbars
errorbar(x',model_series,model_error,'k','linestyle','none');
hold off
댓글 수: 2
Oleg Komarov
2017년 1월 31일
TK1234 answered with "You are brilliant". I moved his answer to the comment section here.
Michael Abboud
2017년 8월 1일
Hi Miraflor, this answer has been recently updated.
If the above method still results in uncentered error bars, I would suggest you look primarily at the 3rd-to-last line where the locations are calculated, or contact MathWorks Technical Support for further assistance.
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Errorbars에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!