2012-06-27 101 views
3

我有一個使用Matlab R2010b和boxplot函數的問題。如何更改內置Matlab boxplot函數的百分位數值?

使用以前版本的Matlab,我在boxplot.m文件中做了一些修改,以便可以更改使用的百分位數值。默認情況下,考慮第一和第三四分位數(第二十五和第七十五分位數)來確定盒圖來定義鬍鬚。我的興趣是使用第10和第90百分位。

我嘗試了我在互聯網上找到的每個解決方案。

所以我的問題是:有沒有人找到一種方法來改變默認值(25th和75th)的boxplot函數使用的Matlab(R2010b和之後)百分點?

很多很多謝謝!

+4

每當我修改功能附帶MATLAB,我做它的一個拷貝,並用「我的」前綴它。因此,我的修改過的函數在新安裝時不會被覆蓋。我建議你也這樣做,並重新使用修改的2012a版本。 – Jonas

+0

如果您確實想要修改2012b版本,則應修復2106行開始的子函數computeBoxIndices。 – Jonas

+0

謝謝。我不想修改R2012b版本,但是R2010b。我設法修改的那個是R2009a的文件。但我會試着按照喬納斯的建議重複使用這一個,我會讓你注意到的。 – Gnesson

回答

1

您可以通過修改圖形對象的屬性(而不是修改函數本身)來更改boxplot顯示數據/分位數的方式。

這是一段代碼,它將修改用於藍框的分位數(最初,藍框對應於.25和.75分位數,並將變爲.1和.9)。上部/下部晶須的底部會相應地改變。請注意,晶須的尖端沒有改變(它們仍然對應於四分位間距的1.5倍)。就像我們改變基本部分一樣,你可以改變鬍鬚的提示。

%%% load some data 
load carsmall 
MPG = MPG(ismember(Origin,'USA','rows')); 
Origin = Origin(ismember(Origin,'USA','rows'),:) 
Origin(isnan(MPG),:) = []; 
MPG (isnan(MPG),:) = []; 

%%% quantile calculation 
q = quantile(MPG,[0.1 0.25 0.75 0.9]); 
q10 = q(1); 
q25 = q(2); 
q75 = q(3); 
q90 = q(4); 

%%% boxplot the data 
figure('Color','w'); 

subplot(1,2,1); 
boxplot(MPG,Origin); 
title('original boxplot with quartile', 'FontSize', 14, 'FontWeight', 'b', 'Color', 'r'); 
set(gca, 'FontSize', 14); 

subplot(1,2,2); 
h = boxplot(MPG,Origin) %define the handles of boxplot 
title('modified boxplot with [.1 .9] quantiles', 'FontSize', 14, 'FontWeight', 'b', 'Color', 'r'); 
set(gca, 'FontSize', 14); 

%%% modify the figure properties (set the YData property) 
%h(5,1) correspond the blue box 
%h(1,1) correspond the upper whisker 
%h(2,1) correspond the lower whisker 
set(h(5,1), 'YData', [q10 q90 q90 q10 q10]);% blue box 

upWhisker = get(h(1,1), 'YData'); 
set(h(1,1), 'YData', [q90 upWhisker(2)]) 

dwWhisker = get(h(2,1), 'YData'); 
set(h(2,1), 'YData', [ dwWhisker(1) q10]) 


%%% all of the boxplot properties are here 
for ii = 1:7 
    ii 
    get(h(ii,1)) 
end 

這裏是結果。

enter image description here