如何更改Matlab内置箱线图函数的百分位值?

3

我在使用Matlab R2010b的boxplot函数时遇到了问题。

在以前的一个Matlab版本中,我对boxplot.m文件进行了一些修改,以便更改使用的百分位值。默认情况下,箱线图考虑第一个四分位数和第三个四分位数(第25个和第75个百分位数)来定义触须。我想要使用第10个和第90个百分位数。

我尝试了我在互联网上找到的所有解决方案。

那么我的问题是:有人找到了一种方法来更改Matlab的boxplot函数(R2010b及以后版本)默认使用的百分位值(第25和第75个)吗?

非常感谢!


4
每当我修改MATLAB中自带的函数时,我都会复制一份并在其前缀加上“my”。这样,我的修改后的函数就不会在新安装中被覆盖。我建议你也这样做,并重复使用修改后的2012a版本。 - Jonas
如果你真的想修改2012b版本,你应该修复从2106行开始的子函数computeBoxIndices - Jonas
谢谢。我不是在尝试修改R2012b版本,而是R2010b。我成功修改并且运行的是来自R2009a的文件。但是我会像Jonas建议的那样尝试重用这个文件,并且我会让你知道进展情况。 - Gnesson
5
如果您要与他人分享这些图表,请记得注明这些是非标准箱线图。人们往往会对看起来熟悉的图表做出很多假设,99.99%的情况下箱线图用于表示分布的四分位数。但是您的图表不会传达这些信息,因此需要向读者指出。 - slayton
请将答案标记为已接受。 - Sibbs Gambling
1个回答

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接