Matlab - 在条形直方图上绘制误差条的问题

时间:2018-02-10 03:32:50

标签: matlab plot histogram

我尝试在直方图的每个条上绘制标准偏差。目前,我从以下直方图开始:

Original histogram

要获得此直方图,我使用了y数组(大小为8x3),如下所示:

% Abscissa
x=[2 4 8 16 32 64 128 256];
% Plot histogram
figure(1);
hbar=bar(log2(x),y(1:8,1:3),'b');

现在,我想绘制24个柱中每个柱的标准偏差。我有一个大小为deviation的数组(8x3)。

我试着这样做:

% Abscissa
x=[2 4 8 16 32 64 128 256];
% Plot histogram
figure(1);
hbar=bar(log2(x),y(1:8,1:3),'b');
hold on;
% Plot standard deviation
errorbar(log2(x),y(1:8,1:3),deviation(1:8,1:3));

但是我收到以下错误:

Error using errorbar>checkSingleInput (line 264)
XData must be the same size as YData.

Error in errorbar (line 94)
x = checkSingleInput(x, sz, 'XData');

Error in plot_benchmark (line 29)
errorbar(log2(x),y(1:8,1:3),deviation(1:8,1:3));

似乎errorbar不支持2D数组。如果是这种情况,如何绕过这个问题,并能够为上面图像中显示的24条柱状图中的每一条绘制误差条?

更新1:我尝试通过以下方式调整可能重复的解决方案:

hbar=bar(log2(x),y(1:8,1:3),'b');
hold on;
% Compute x position for each bar
for i=1:8
   x1=get(get(hbar(i),'children'),'xdata');
   barsx(i,1:3)=mean(x1,1)
end
% Plot standard deviation
errorbar(barsx,y(1:8,1:3),deviation(1:8,1:3));

但数组barsx是空的,我不明白为什么......

有什么想法吗?

提前致谢

1 个答案:

答案 0 :(得分:0)

您可以使用barweb功能创建错误栏。在下面的代码中,我使用与数组维度相同的随机数据来评估我的解决方案。

% Abscissa
y = rand(8,3);
deviation = y-(y/2);
x=[2 4 8 16 32 64 128 256];
% Plot histogram
figure(1);
hbar=bar(log2(x),y(1:8,1:3),'b');
hold on;
% Plot standard deviation
barweb(y,deviation,[],x);

barweb中有错误,您可以找到解决方法here