Matlab 将NAN排除在具有覆盖数据的盒形图的数据排序之外
我正在使用以下串联矩阵中的叠加数据绘制一个方框图:Matlab 将NAN排除在具有覆盖数据的盒形图的数据排序之外,matlab,plot,nan,boxplot,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(da
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);
datas=排序(数据);
数据收件箱=数据(ceil(结束/4)+1:楼层(结束*3/4),:);
[n1,n2]=大小(数据收件箱);
dataoutbox=数据([1:ceil(end/4)楼层(end*3/4)+1:end],:);
n3=尺寸(数据发件箱,1);
%计算四分位数
dataq=分位数(数据[25.5.75]);
%计算方框和异常值之间的范围=四分位数的1.5*IQR之间
数据iqr=iqr(数据);
datar=[dataq(1,:)-dataiqr*1.5;dataq(3,:)+dataiqr*1.5];
dataoutbox(DataOutboxOne(n3,1)*datar(2,:)=nan;
图(
等等
bp=箱线图(数据);
图(1(n1,1)*[1 2 3 4 5 6 7 8]+.4*(rand(n1,n2)-.5),数据收件箱,“k.”,“MarkerSize”,12)
绘图(一个(n3,1)*[1 2 3 4 5 6 7 8]+.4*(兰德(n3,n2)-.5),数据发件箱“,”颜色“,[1 1 1]*.5,”标记化“,”12)
设置(bp,'linewidth',1);
如上所述,我正在根据IQR将数据分为“datainbox”和“dataoutbox”。代码按预期工作(归功于JJM Driesson),但包含NAN的数据列除外,如图中所示,数据排序不正确。我应该如何修改上述代码以从计算中排除NAN并防止其影响绘图
谢谢你抽出时间
劳拉你应该分别处理每一列。可以按如下方式选择NaN值:
col=data(~isnan(data(:,i)),i)代码>
如果您希望所有箱线图都在同一个图形中,可以尝试使用此选项。这里是对箱线图进行分组的步骤。谢谢您的帮助,使用您的两个提示,我已经解决了!