【问题标题】:How to change percentile values of for the built in Matlab boxplot function?如何更改内置 Matlab 箱线图函数的百分位值?
【发布时间】:2012-06-27 15:40:21
【问题描述】:

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

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

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

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

非常感谢!

【问题讨论】:

  • 每当我修改 MATLAB 附带的函数时,我都会复制它并在其前面加上“my”。因此,我修改的功能不会在新安装中被覆盖。我建议你也这样做,并重新使用修改后的 2012a 版本。
  • 如果你真的要修改2012b版本,你应该修复从第2106行开始的子函数computeBoxIndices
  • 谢谢。我不是要修改 R2012b 版本,而是要修改 R2010b。我设法修改并且有效的文件是来自 R2009a 的文件。但我会按照 Jonas 的建议尝试重用这个,我会让你注意到。
  • 如果您与其他人分享这些图,请记住注意这些是非标准箱线图。人们倾向于对看起来很熟悉的图做出很多假设,并且 99.99% 的时间箱线图用于表示分布的四分位数。您的情节不会传达该信息,因此您需要向读者表明这一点。
  • 请将答案标记为已接受。

标签: matlab


【解决方案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  

这是结果。

【讨论】:

    猜你喜欢
    • 2014-09-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多