从具有重叠数据的箱形图的数据排序中排除 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。
我正在绘制一个箱形图,其中包含来自以下串联矩阵的重叠数据:
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。