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

Excluding NaNs from data sorting for box plot with overlaid data

我正在绘制一个箱形图,其中包含来自以下串联矩阵的重叠数据:

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);

如上所述,我根据 IQR 将数据分为 'datainbox' 和 'dataoutbox'。代码按预期工作(归功于 JJM Driesson),但包含 NaN 的数据列除外,如图中所示,数据未正确排序。我应该如何修改上面的代码以从计算中排除 NaN 并防止它影响情节?

感谢您的宝贵时间,

劳拉

您应该分别处理每一列。您可以 select NaN 值,如下所示:col = data(~isnan(data(:, i)), i);

如果你想要所有的箱线图在同一张图中,你可以尝试使用这个answer