Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab 将NAN排除在具有覆盖数据的盒形图的数据排序之外_Matlab_Plot_Nan_Boxplot - Fatal编程技术网

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)


如果您希望所有箱线图都在同一个图形中,可以尝试使用此选项。

这里是对箱线图进行分组的步骤。谢谢您的帮助,使用您的两个提示,我已经解决了!