从具有重叠数据的箱形图的数据排序中排除NaN

时间:2017-02-28 17:39:41

标签: matlab plot nan boxplot

我正在使用以下连续矩阵中的重叠数据绘制一个箱形图:

data = [10  16  24  31  12  26  23  33;11   15  27  27  12  24  22  36;12   15  24  25  14  25  22  37;10   16  27  24  14  27  23  41;12   15  NaN NaN 15  NaN 22  NaN;13  18  NaN NaN 16  NaN 22  NaN]

该图的代码是:

datas=sort(data);
datainbox=datas(ceil(end/4)+1:floor(end*3/4),:);
[n1,n2]=size(datainbox);
dataoutbox=datas([1:ceil(end/4) floor(end*3/4)+1:end],:);
n3=size(dataoutbox,1);
% calculate quartiles
dataq=quantile(data,[.25 .5 .75]);
% calculate range between box and outliers = between 1.5*IQR from quartiles
dataiqr=iqr(data);
datar=[dataq(1,:)-dataiqr*1.5;dataq(3,:)+dataiqr*1.5];
dataoutbox(dataoutbox<ones(n3,1)*datar(1,:)|dataoutbox>ones(n3,1)*datar(2,:))=nan;

figure()
hold on
bp = boxplot(data);
plot(ones(n1,1)*[1 2 3 4 5 6 7 8]+.4*(rand(n1,n2)-.5),datainbox,'k.','MarkerSize',12)
plot(ones(n3,1)*[1 2 3 4 5 6 7 8]+.4*(rand(n3,n2)-.5),dataoutbox,'.','color',[1 1 1]*.5,'MarkerSize',12)
set(bp,'linewidth',1);

如上所述,我正在将数据分类到&#39; datainbox&#39;和&#39; dataoutbox&#39;基于IQR。除了包含NaN的数据列之外,代码按预期工作(归功于JJM Driesson),其中如图所示,数据未正确排序。我应该如何修改上面的代码以从计算中排除NaN并防止这影响图?

感谢您的时间,

劳拉

1 个答案:

答案 0 :(得分:0)

您应该分别处理每一列。您可以按如下方式选择NaN值:col = data(~isnan(data(:, i)), i);

如果您想要同一图中的所有箱图,可以尝试使用此answer