Matlab Boxplot:使用特定百分位数作为上部胡须或在手动上部胡须编辑后删除多余的异常值

时间:2015-01-15 11:17:12

标签: matlab plot boxplot

对于MATLAB中的箱形图,我想问一下特定的百分位数是否可以用作上层晶须。我想用第95百分位数作为上部胡须,第5百分位数作为下部胡须。

MATLAB的默认行为是将晶须长度= 1.5 * IQR(第75百分位数 - 第25百分位数),并且这个晶须长度可以更改为IQR的另一倍数,但不能更改为特定的百分位数。请解释一下改变它的方法。

例如,对于以下100个数据:

50(重复80次), 76(重复10次), 91,92,93,94,95,96,97,98,99,100

或在MATLAB中:

A([1:80],1) = 50; A([81:90],1) = 76; A([91:100],1) = [91:100]; boxplot(A)

有没有办法指定95或甚至76在胡须内?还是上晶须的价值?

我已使用以下代码调整了上下胡须(虽然在本例中不需要较低的胡须);但是这段代码并没有删除晶须中的异常值,导致结果看起来不清楚。

p([1:2],1) =prctile(A,[5,95])
h = flipud(findobj(gca,'Tag','Upper Whisker'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(2) = p(2,j);
set(h(j),'YData',ydata);
end
% Replace all y values of adjacent value
h = flipud(findobj(gca,'Tag','Upper Adjacent Value'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(:) = p(2,j);
set(h(j),'YData',ydata);
end
% Replace lower end y value of whisker
h = flipud(findobj(gca,'Tag','Lower Whisker'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(1) = p(1,j);
set(h(j),'YData',ydata);
end
% Replace all y values of adjacent value
h = flipud(findobj(gca,'Tag','Lower Adjacent Value'));
for j=1:length(h);
ydata = get(h(j),'YData');
ydata(:) = p(1,j);
set(h(j),'YData',ydata);
end

任何帮助都将受到高度赞赏!

谢谢!

2 个答案:

答案 0 :(得分:0)

您需要添加以下内容:

h = flipud(findobj(gca,'Tag','Outliers'));
for j=1:length(h);
  ydata = get(h(j),'YData');
  xdata = get(h(j),'XData');
  remdata = (ydata >= p(1,j)) & (ydata <= p(2,j));
  ydata(remdata) = [];
  xdata(remdata) = [];
  set(h(j),'XData',xdata,'YData',ydata);
end

答案 1 :(得分:0)

我已经尝试了一段时间才能理解&#34;标准&#34;或&#34;默认&#34; Matlab中的箱形图,更具体地说,是晶须的长度。

当然,手册给出了一个完全无用的递归定义,它说明了从四分位数范围的末端到晶须长度范围内最远的观察结果&#34;晶须&#34;

我认为你说错了#34; MATLAB的胡须长度为1.5 IQR&#34;。默认情况下,它会查找低于(Q25 - 1.5 IQR)及以上(Q75 + 1.5 IQR)的所有样本数据,并调用这些数据&#34;异常值&#34;。那么,上部晶须是样品中不是上部异常值的最大值,而较低的晶须是不是较低异常值的最小样品值。

换句话说,晶须之间的总距离不固定且等于4 IQR,但是样本中最大值和最小值之间的距离不是异常值。