MATLAB画箱型图及简单添加图例的方法

今天帮同学画了几个箱型图,不太好画嘞,特别是添加图例,然后给大家分享一下,箱型图的含义不多解释,就是上下四分位点处理大量数据看分布情况。然后效果如下在这里插入图片描述
其中图例名称及颜色可任意修改

首先读取数据
元素数组是 2*7=14组

clear all
close all
x1=[xlsread('F:\灰度数据.xlsx','Sheet1','B2:B101')]';
x2=[xlsread('F:\灰度数据.xlsx','Sheet1','G2:G101')]';
x3=[xlsread('F:\灰度数据.xlsx','Sheet1','L2:L101')]';
x4=[xlsread('F:\灰度数据.xlsx','Sheet1','Q2:Q101')]';
x5=[xlsread('F:\灰度数据.xlsx','Sheet1','V2:V101')]';
x6=[xlsread('F:\灰度数据.xlsx','Sheet1','AA2:AA101')]';
x7=[xlsread('F:\灰度数据.xlsx','Sheet1','AF2:AF101')]';
x8=[xlsread('F:\灰度数据.xlsx','Sheet1','AK2:AK101')]';
x9=[xlsread('F:\灰度数据.xlsx','Sheet1','AP2:AP101')]';
x10=[xlsread('F:\灰度数据.xlsx','Sheet1','AU2:AU101')]';
x11=[xlsread('F:\灰度数据.xlsx','Sheet1','AZ2:AZ101')]';
x12=[xlsread('F:\灰度数据.xlsx','Sheet1','BE2:BE101')]';
x13=[xlsread('F:\灰度数据.xlsx','Sheet1','BJ2:BJ101')]';
x14=[xlsread('F:\灰度数据.xlsx','Sheet1','BO2:BO101')]';

然后是确定14个数据的横坐标位置,注意要分开选坐标

figure
pos1=[1.5 4.5 7.5 10.5 13.5 16.5 19.5 ]
pos2=[2 5 8 11 14 17 20]
g1=[repmat(1,length(x1),1);repmat(3,length(x3),1);repmat(5,length(x5),1);repmat(7,length(x7),1);repmat(9,length(x9),1);repmat(11,length(x11),1);repmat(13,length(x13),1)];
g2=[repmat(2,length(x2),1);repmat(4,length(x4),1);repmat(6,length(x6),1);repmat(8,length(x8),1);repmat(10,length(x10),1);repmat(12,length(x12),1);repmat(14,length(x14),1)];
a=[x1';x3'; x5';x7';x9';x11';x13'];
b=[ x2' ;x4' ;x6' ;x8';x10';x12';x14'];

上述数据转化为了矩阵,所以用到了repmat,length读取长度


p1=boxplot(a,g1,'colors','k','positions' ,pos1,'width',0.2, 'labels', pos1)
hold on
p2=boxplot(b,g2,'colors','b','positions' ,pos2,'width',0.2, 'labels', pos2)
hold on
title('')
set(gca,'XTickLabel',{'0min','20min','40min','60min','80min','100min','120min',''})
xlabel('X')
ylabel('Y')

然后是箱型图画图语法,不多解释,


p1=boxplot(a,g1,'colors','k','positions' ,pos1,'width',0.2, 'labels', pos1)
hold on
p2=boxplot(b,g2,'colors','b','positions' ,pos2,'width',0.2, 'labels', pos2)
hold on
title('')
set(gca,'XTickLabel',{'0min','20min','40min','60min','80min','100min','120min',''})
xlabel('X')
ylabel('Y')

好了,到此,如果不添加图例就以及完成,但是要填加图例的话需要用到findall函数,自定义一个Hlegend函数去搜索整个图,具体解释可参考添加链接描述

hLegend = legend(findall(gca,'Tag','Box'), {'Group A','Group B'});
box_vars = findall(gca,'Tag','Box');
hLegend = legend(box_vars([8,6]), {'NAME1','NAME2'});
legend('Location','northwest')

我在这里单独解释下选取,好多地方都没有解释清楚这个AB或者ABCDEFG在怎么来的
box_vars([A,B])的理由

% 元素数组是 2*7=14% box_vars([A,B])
% A 属于 814任意数值即可
% B 属于 17任意数值即可

可以以此类推,用的所示索引数组的方法,互换A,B可以交换颜色

然后给大家推荐一个覆盖添加图例的方法,不那么麻烦,我们可以先画出另一个图,代码如下:只要是能够话出两个图例的图即可,此处注意横坐标要与原图相等。

x = linspace(0,20);
y1 = cos(x);
plot(x,y1,'b')

hold on 
y2 = cos(2*x);
plot(x,y2,'k')

legend('NAME1','NAME2');

可以看到我们画出的图如下

在这里插入图片描述
好了我们现在只需要这个图的图例就可以的,我们可以利用MATLAB语句 hold on的特点,当显示多个覆盖图像时,会优先显示第一个并且保留后面的图例,因此。我们将此代码添加上去。就可以完成覆盖了。完整代码如下

clear all
close all
x1=[xlsread('F:\灰度数据.xlsx','Sheet1','B2:B101')]';
x2=[xlsread('F:\灰度数据.xlsx','Sheet1','G2:G101')]';
x3=[xlsread('F:\灰度数据.xlsx','Sheet1','L2:L101')]';
x4=[xlsread('F:\灰度数据.xlsx','Sheet1','Q2:Q101')]';
x5=[xlsread('F:\灰度数据.xlsx','Sheet1','V2:V101')]';
x6=[xlsread('F:\灰度数据.xlsx','Sheet1','AA2:AA101')]';
x7=[xlsread('F:\灰度数据.xlsx','Sheet1','AF2:AF101')]';
x8=[xlsread('F:\灰度数据.xlsx','Sheet1','AK2:AK101')]';
x9=[xlsread('F:\灰度数据.xlsx','Sheet1','AP2:AP101')]';
x10=[xlsread('F:\灰度数据.xlsx','Sheet1','AU2:AU101')]';
x11=[xlsread('F:\灰度数据.xlsx','Sheet1','AZ2:AZ101')]';
x12=[xlsread('F:\灰度数据.xlsx','Sheet1','BE2:BE101')]';
x13=[xlsread('F:\灰度数据.xlsx','Sheet1','BJ2:BJ101')]';
x14=[xlsread('F:\灰度数据.xlsx','Sheet1','BO2:BO101')]';
figure
pos1=[1.5 4.5 7.5 10.5 13.5 16.5 19.5 ]
pos2=[2 5 8 11 14 17 20]
g1=[repmat(1,length(x1),1);repmat(3,length(x3),1);repmat(5,length(x5),1);repmat(7,length(x7),1);repmat(9,length(x9),1);repmat(11,length(x11),1);repmat(13,length(x13),1)];
g2=[repmat(2,length(x2),1);repmat(4,length(x4),1);repmat(6,length(x6),1);repmat(8,length(x8),1);repmat(10,length(x10),1);repmat(12,length(x12),1);repmat(14,length(x14),1)];
a=[x1';x3'; x5';x7';x9';x11';x13'];
b=[ x2' ;x4' ;x6' ;x8';x10';x12';x14'];

p1=boxplot(a,g1,'colors','k','positions' ,pos1,'width',0.2, 'labels', pos1)
hold on
p2=boxplot(b,g2,'colors','b','positions' ,pos2,'width',0.2, 'labels', pos2)
hold on
title('')
set(gca,'XTickLabel',{'0min','20min','40min','60min','80min','100min','120min',''})
xlabel('X')
ylabel('Y')
hold on 
x = linspace(0,20);
y1 = cos(x);
plot(x,y1,'b')
hold on 
y2 = cos(2*x);
plot(x,y2,'k')

legend('NAME1','NAME2');

谢谢大家的观看~

  • 7
    点赞
  • 53
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值