因为成果图往往可视化,对于大量数据而言,箱型图是很好的选择,笔者默认读者都明白箱型图是怎么一回事儿,接下来分享自己的一些心得:
我们期望的最后结果是这样的,即有很多组,且每组有2个以上的箱子:
如上图,当你有三个数据源,希望制作这三个数据源关于某一变量的箱型图
(我的这个数据是:横轴表示年份,不同颜色的数据表示的是三个不同的蒸发产品,纵轴是流域个数,数据太大就不发上来了)
先分享一个制作箱型图的链接,其链接和截图如下:
实现长度不同多组数据散点箱型图(box-scatterplot)的方法
尽管各组数据个数不同,但是通过上图中的方法就还是可以绘制(而不用非得是一个完整矩阵)。
其思路是:
将一个数据源的所有的数据分好组之后(n个数据分成m组,我根据年份分成了30组),将这些组按着顺序前后衔接,生成1xn的一维矩阵(暂且称之为一维数据阵),同时也新构建一个新的1xn的“组号矩阵”(这就是上图第二行代码的意义),这个“组号”矩阵里的元素等于一维数据阵中对应位置上的元素的组号,所以这个组号矩阵应该是类似[1,1,1,…2,2,2,2,…,3,3,…,4,4,…]的
不同数据长度绘制箱型图的方法就是以上,现在解决下一个问题:如何画出一个组里包含2个以上的箱子的箱型图?
思路就是更改每个箱子的position,让箱子的排列’看起来’被分成了不同组
后续代码如下:
position_1 = 0.7:1:29.7;
boxplot(group_A,pre_group_A,'colors','b','positions',position_1,'width',0.2,'symbol','');
hold on
position_3 = 1.3:1:30.3;
boxplot(group_B,pre_group_B,'colors','g','positions',position_3,'width',0.2,'symbol','');
position_2 = 1:1:30;
boxplot(group_C,pre_group_C,'colors','k','positions',position_2,'width',0.2,'symbol','');
set(gca,'XLim',[0 31]); %限定横轴显示长度
set(gca,'YLim',[0 160]); %限定纵轴显示长度
% 'symbol','' 是为了取消显示异常值
需要注意的是,position_2 = 1:1:30,是在给处在中间的那个箱型图定义位置,所以要放在最后去定义(因为在重复使用boxplot时,matlab会将最后一次生成的箱型图放在横轴的[1,2,3,…]的节点上)
参考学习了很多大佬的经验,链接如下:
matlab使用boxplot时,如果出现异常值怎么处理
Matlab如何画箱线图群组