3

我试图得到:一个很好的组条形图。我希望每个条上都有这样的错误栏(或类似的,由您自行决定):

在此处输入图像描述

我有办法:

ff =
             Medical eq    Patient   Hygiene   Near bed   Far bed
Direct        1.2759    0.9253    0.6092    1.0460    1.3276
Housekeeping  1.0833    0.2500    0.5833    2.1667    1.3333
Mealtimes      0        0.3000    0.7000    1.4500    0.5000
Medication    0.3694    0.7838    0.8919    1.5495    1.0541
Misc          0.1059    0.1294    0.4118    0.8000    0.8353
Personal      0.0370    0.4074    0.8148    1.2593    0.7037

标准差

ee =

2.0411    1.1226    0.8378    1.5007    1.3776
1.3114    0.4523    0.6686    2.4058    1.1547
     0    0.7327    1.3803    2.1392    0.6070
0.7499    0.9186    1.0300    1.2844    1.3062
0.4371    0.3712    0.7605    1.0212    0.6699
0.1925    0.6939    1.6417    3.5582    1.5644

相反,我得到了这个:

在此处输入图像描述

通过使用:

bb=bar(ff'); hold all
data=repmat([1:6]'*ones(5,1)',1,1)
er=errorbar(data, ff, ee, '.')

我读到我必须找到每个酒吧的中心?太疯狂了!任何解决方法?

4

2 回答 2

3

每个条的中心可以通过

x = get(get(h(i),'children'),'xdata');
barsx=mean(x,1);

barx 为每个条形子集的每个第 i 个元素提供中心。

h=bar(bars)
for i=1:6
  x = get(get(h(i),'children'),'xdata');
  barsx(1:6,i)=mean(x,1)
end
hold all
h=errorbar(barsx,bars,barsvar)

使错误具有与栏相同的颜色:

figure()
h=bar(bars) 
col=[0 0 1;0 1 0;1 1 0; 1 1 1; 0 0 0; 0 1 1];
colormap([0 0 1;0 1 0;1 1 0; 1 1 1; 0 0 0; 0 1 1])
hold all
for i=1:6
  x = get(get(h(i),'children'),'xdata')
  barsx=mean(x,1)
  h1=errorbar(barsx',bars(1:6,i),barsvar(1:6,i),'color',col(i,:))
  set(h1,'linestyle','none')
end
于 2013-11-28T14:29:50.963 回答
2

真的没那么疯狂!

您可以只使用errorbar您随时可用的数据。

此代码通过为每个组添加 1 和为组中的每个条添加 1/7 来计算正确的位置。

for i = 1:5
    j = 1:6; 
    x = -0.5 + i + 1/7 * j; 
    errorbar(x, ff(j,i), ee(j,i), '.'); 
end

结果是:

在此处输入图像描述

(省略标签,但除此之外,这似乎与您要查找的内容非常相似)

于 2013-03-30T11:17:09.960 回答