2014-02-24 38 views
2

是否可以調用boxplot的屬性來獲取離羣值的值和離羣值的元素座標 - 如果數據是矩陣?如何從箱圖中獲取離羣值及其座標的值

爲了這個例子,假設我有這個數據數組顯示兩個異常值,我該怎麼做呢?

A = [ -2 -1 2 2.1 2.2 2.5 2.6 2.8 3 3.2 3.4 3.5 4.2 4.5 5]; 

figure(1) 
s = subplot(6,1,1:5); 
o = boxplot(A, 'whisker', 1.5); 
title('A') 
axis(s,[0 2 -3 7]) 

s1 = subplot(6,1,6); 
plot(A,0,'bo') 
axis(s1,[-3 7 -1 1]) 
set(s1,'YTickLabel',[],'YTick',[]) 

%@chappjc posted a working method 
s_Outliers = findobj(o,'Tag','Outliers'); 
outliers_of_A = get(s_Outliers,'YData'); 
disp('The values of the outliers'); 
disp(outliers_of_A); 

感謝您的答案 - 它完美的作品。 @chappjc發佈了一個工作方法 - 使用它可以刪除outliers_of_A form A的值嗎?

回答

3

異常標記的句柄包含實際的異常值數據。創建您的boxplot,將句柄結構保存爲輸出參數。作爲R2014a的,離羣值手柄在列表中(如果不顯示任何缺口)的最後或倒數第二(如果顯示缺口),但你可以使用findobj可以肯定的:

>> hb = boxplot(A, 'whisker', 1.5); 
>> hOutliers = findobj(hb,'Tag','Outliers'); 
>> yy = get(hOutliers,'YData') 
yy = 
    -2 -1 
+0

@ user1320058我很高興,這爲你工作,感謝您接受它作爲爲你的最佳答案。如果您覺得傾向,也可以隨時投票給答案。 :) – chappjc

+0

是否有可能刪除yy形式A的值? – Flight505

+1

當然,用'delete(hOutliers)'將它們從盒子圖中刪除,用'A = setdiff(A,yy)'將它們從'A'中刪除。你可以投票答案(點擊數字上方的向上箭頭)? – chappjc

1

雖然@chappjc已就如何可以使用箱線圖對象本身做一個很好的答案,我目前做的數學方法如下:

Q1 = quantile(A,0.25); 
Q3 = quantile(A,0.75); 
Spread = 1.5*(Q3-Q1); 
MaxValue = Q3 + Spread; 
MinValue = Q1 - Spread; 
A(A>MaxValue | A<MinValue) 
ans = 

-2 -1 
相關問題