Matlab 不同数据长度,分组绘制箱型图(Boxplot)

因为成果图往往可视化,对于大量数据而言,箱型图是很好的选择,笔者默认读者都明白箱型图是怎么一回事儿,接下来分享自己的一些心得:

我们期望的最后结果是这样的,即有很多组,且每组有2个以上的箱子:
Matlab 不同数据长度,分组绘制箱型图(Boxplot)_第1张图片如上图,当你有三个数据源,希望制作这三个数据源关于某一变量的箱型图
(我的这个数据是:横轴表示年份,不同颜色的数据表示的是三个不同的蒸发产品,纵轴是流域个数,数据太大就不发上来了)

先分享一个制作箱型图的链接,其链接和截图如下:
实现长度不同多组数据散点箱型图(box-scatterplot)的方法
Matlab 不同数据长度,分组绘制箱型图(Boxplot)_第2张图片尽管各组数据个数不同,但是通过上图中的方法就还是可以绘制(而不用非得是一个完整矩阵)。

其思路是:

将一个数据源的所有的数据分好组之后(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如何画箱线图群组

你可能感兴趣的:(Matlab 不同数据长度,分组绘制箱型图(Boxplot))