我正在使用以下连续矩阵中的重叠数据绘制一个箱形图:
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并防止这影响图?
感谢您的时间,
劳拉
答案 0 :(得分:0)
您应该分别处理每一列。您可以按如下方式选择NaN值:col = data(~isnan(data(:, i)), i);
如果您想要同一图中的所有箱图,可以尝试使用此answer。