如何绘制带有错误条的分组条形图,如图所示?

时间:2013-01-10 11:01:25

标签: matlab

我正在尝试绘制一个分组的条形图,如下图所示。我找到了errorbar()函数,但到目前为止我无法弄清楚如何制作它。

这是我的代码。

Y = [0.9322225 0.86225 0.8973;
     0.8953635 0.862868 0.8099605;
     0.7473585 0.675698 0.80484];

bar(Y, 'grouped')
bar(Y, 'BarWidth', 0.5);
set(gca,'XTickLabel',{'', 'ML', '',  'HSV', '', 'NCC'});

非常感谢任何建议或指导。

信用:这个数字来自Sanin等人的工作。 “阴影检测:最近方法的调查和比较评估。”

Bar chart

2 个答案:

答案 0 :(得分:7)

enter image description here enter image description here![

clc;
close all;

%Suppose you have the following data for five different strains across 4
%different experimental conditions (Conditions A,B,C,D, from left to right)


Strain1_Mean=[1.0 1.5 2.0 1.5]; % data
Strain2_Mean=[2.0 2.5 2.0 2.5]; % data
Strain3_Mean=[1.0 0.5 1.0 3.5]; % data
Strain4_Mean=[1.2 2.5 1.0 1.5]; % data
Strain5_Mean=[2.1 1.3 2.0 2.5]; % data

Strain1_std=[0.15 1.3 0.5 0.4];    %errors in data
Strain2_std=[1.0 1.5 0.2 0.5];     %errors in data
Strain3_std=[1.3 0.4 0.3 0.5];     %errors in data
Strain4_std=[0.13 1.36 0.17 0.45]; %errors in data
Strain5_std=[1.8 1.1 0.25 0.38];   %errors in data

% for asymmetric errors:

barwitherr(cat(3,zeros(4,5),[Strain1_std' Strain2_std' Strain3_std'...
    Strain4_std' Strain5_std']),[1 2 3 4],[Strain1_Mean' Strain2_Mean'...
    Strain3_Mean' Strain4_Mean' Strain5_Mean'],'LineWidth',2,...
    'BarWidth',0.8)


%for symmetric errors:

% barwitherr([Strain1_std' Strain2_std' Strain3_std' Strain4_std'...
%    Strain5_std'], [1 2 3 4],[Strain1_Mean' Strain2_Mean'...
%    Strain3_Mean' Strain4_Mean' Strain5_Mean']) 



set(gca,'XTickLabel',{'Group A','Group B','Group C','Group D'})
   legend('Parameter 1','Parameter 2','Parameter 3','Parameter 4',...
       'Parameter 5')
    ylabel('Value')
    grid on
   colormap summer

if you want to add more data sets, change zeros(4,5) to zeros(4,...) 6,7,8... 

I don't know how implement circles and squares like in example, if somebody can do it, you are welcome to improve :)][3]

答案 1 :(得分:6)

我不是100%如何复制该图表,但这可能会帮助您开始。

我在文件交换中找到了这个:http://www.mathworks.com/matlabcentral/fileexchange/30639-bar-chart-with-error-bars/content/barwitherr.m,尝试绘制带有误差线的条形图。它允许不对称的误差条,我想如果你想让标记不同(比如你的例子中的方块和圆圈),那么你需要在链接的代码中改变这一行:errorbar(mean(x,1),values(xOrder,col),lowerErrors(xOrder,col), upperErrors(xOrder, col), '.k')

类似于:

errorbar(mean(x,1),values(xOrder,col),lowerErrors(xOrder,col), 'ok');
errorbar(mean(x,1),values(xOrder,col), upperErrors(xOrder, col), '*k')

此外,如果您希望所有三个群组都有标签,请尝试set(gca,'XTickLabel',{'ML', 'HSV', 'NCC'});

另请查看colormap(summer)help legend