2017-08-17 73 views
0

我試圖找到一種方法在條形圖上包含錯誤欄。可悲的是,我只能找到正常2d圖的誤差線。一個非常草率的方式我試圖與修復:帶有Scilab中的錯誤欄的條形圖

close(); 

x=[2, 4, 8]; 
y=[0.2 0.12 0.06; 0.17 0.22 0.05; 0.19 0.20 0.07]; 
dev=[0.08 0.08 0.03; 0.03 0.05 0.02; 0.04 0.06 0.02]; 

bar(x, (y+dev), 'w--') 
bar(x, y) 

但是,這並不表明我的下邊界(它不好看)

回答

0

,您仍然可以使用errbar()在你的棒圖。如果查看bar()的工作方式,它將分別繪製y的每一列,然後將它們在水平軸上向右或向左移動。

爲了達到此目的,您需要檢索每個集合的移位量並將該值添加到errbar()x輸入。爲了得到一個result like this,你可以使用下面的代碼(提問者的音符後更新):

x=[2, 4, 8]; 
y=[0.2 0.12 0.06; 0.17 0.22 0.05; 0.19 0.20 0.07]; 
dev=[0.08 0.08 0.03; 0.03 0.05 0.02; 0.04 0.06 0.02]; 
bar(x,y) 

//get the entity handler 
e=gce(); 

//loop over the entity to retrive x_shift values 
for i = 1:length(y,'c') 
    x_shift(i,:) = e.children(i).x_shift; 
end 

//flip x_shift vertically 
x_shift = x_shift($:-1:1,:); 

//plot the error bars 
for i = 1:length(y,'c') 
    errbar(x + x_shift(i), y(:,i)', dev(:,i)', dev(:,i)'); 
end 
0

@luispauloml 謝謝您的回答。在實施它時,我發現了一個小錯誤。在for循環中,您必須使用y而不是x的大小。這只是因爲y碰巧是一個矩形矩陣。我做了一個更大的行,並將偏差更改爲y的相同值,以查看矩陣是否以正確的方式定義,並且我不會混淆這些值。

x=[2; 4; 8]; 
y=[0.2 0.12 0.06 0.1; 0.17 0.22 0.05 0.1; 0.19 0.20 0.07 0.1]; 
dev=[0.2 0.12 0.06 0.1; 0.17 0.22 0.05 0.1; 0.19 0.20 0.07 0.1]; 

bar(x,y) 

//get the entity handler 
e=gce(); 

//loop over the entity to retrive x_shift values 
for i = 1:size(y,'c') 
    x_shift(i,:) = e.children(i).x_shift; 
end 

//flip x_shift vertically 
x_shift = x_shift($:-1:1,:); 

//plot the error bars 
for i = 1:size(y,'c') 
    errbar(x + x_shift(i), y(:,i)', dev(:,i)', dev(:,i)'); 
end