我在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_cc
,Z_cc
和err_Z
是具有31个分量和双精度的向量(Z是另外的复数)。但是,我得到以下结果:
我认为问题可能出在错误栏的'capsize',但是当我尝试添加属性'capsize'时:
errorbar(f_cc/(1e6), abs(Z_cc),err_Z,'o-','Capsize',1);`
然后Matlab给我一个错误:
ErrorBar类上没有Capsize属性
所以我不知道如何更改它(如果那是问题)。
答案 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轴跨度为十年),则该图看起来非常完美。
由于数据的分布范围很小,因此使用对数轴毫无意义。使用set(gca, 'XScale','lin')
,您的绘图看起来几乎一样,但是带有正常的误差线。
使用线性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中引入的,因此希望您会收到该错误消息。