无法缩短Capsize错误栏

时间:2019-05-04 15:02:26

标签: matlab matlab-figure

我在Matlab R2015a中有以下代码:

figure
set(gcf,'color','w')
hax = axes;
errorbar(f_cc/(1e6), abs(Z_cc),err_Z,'o-');
hax.XScale = 'log';
grid on
xlim([3.6846 3.6900])
xlabel('f(MHz)')
ylabel('|Z(f)|')

其中f_ccZ_ccerr_Z是具有31个分量和双精度的向量(Z是另外的复数)。但是,我得到以下结果:

plot showing error bars with caps that span the whole plot

我认为问题可能出在错误栏的'capsize',但是当我尝试添加属性'capsize'时:

errorbar(f_cc/(1e6), abs(Z_cc),err_Z,'o-','Capsize',1);`

然后Matlab给我一个错误:

  

ErrorBar类上没有Capsize属性

所以我不知道如何更改它(如果那是问题)。

1 个答案:

答案 0 :(得分:0)

我拥有的最旧版本的MATLAB是R2016a,我可以用它重现您的错误栏错误。在R2017a中已修复。

errorbar与(相对)较小的对数x轴的组合产生了问题。如果使x轴保持线性,或者x值的分布范围较大,则误差线可以很好地工作。例如:

x = linspace(3.6846, 3.6900, 20);
y = rand(size(x));
e = linspace(0.01, 0.5, numel(x));
errorbar(x, y, e, 'o-')
set(gca, 'XScale','log')
xlim(x([1,end]))

显示可笑的误差线,但是如果我们设置x = linspace(3.6846, 3.6900*10, 20);(即x轴跨度为十年),则该图看起来非常完美。

解决方法#1

由于数据的分布范围很小,因此使用对数轴毫无意义。使用set(gca, 'XScale','lin'),您的绘图看起来几乎一样,但是带有正常的误差线。

解决方法#2

使用线性x轴,但模拟对数绘图:

errorbar(log(x), y, e, 'o-')
ticks = 3.684:0.002:3.690;
set(gca, 'XTick',log(ticks), 'XTickLabel',ticks);
xlim(log(x([1,end])))

但是说实话,这甚至看起来都不像对数轴,因为范围太小了,我实在无法分辨出...:)


关于设置'capsize'属性的错误:与Sardar Usama mentioned in a comment一样,此属性是R2016b中引入的,因此希望您会收到该错误消息。