Matlab实现好看的配对箱线图的绘制

 更新时间:2022年08月17日 08:34:06   作者:slandarer  
配对箱线图,常见于配对样本的数据分析中,它除了能够表现两组的整体差异,还能够清晰地呈现单个样本的前后改变。本文将用Matlab实现配对箱线图的绘制,需要的可以参考一下

写了一个配对箱线图绘制模板:

数据准备

这里随机生成了一些正态分布随机数作为数据,使用时可以将Y换成自己的数据:

% 随机构造一组数据
PntSet1=sort(mvnrnd(0,2,25));
PntSet2=sort(mvnrnd(.5,2.5,25));
PntSet3=sort(mvnrnd(0,2,25));
PntSet4=sort(mvnrnd(.5,2.5,25));
% Y=[PntSet1,PntSet2];
Y=[PntSet1,PntSet2,PntSet3,PntSet4];

配色

这里准备了七组数据,只需要修改colorList=Cn即可:

% 配色列表
C1=[59 125 183;244 146 121;242 166 31;180 68 108;220 211 30]./255;
C2=[102,173,194;36,59,66;232,69,69;194,148,102;54,43,33]./255;
C3=[38,140,209;219,51,46;41,161,153;181,138,0;107,112,196]./255;
C4=[110,153,89;230,201,41;79,79,54;245,245,245;199,204,158]./255;
C5=[235,75,55;77,186,216;2,162,136;58,84,141;245,155,122]./255;
C6=[23,23,23;121,17,36;44,9,75;31,80,91;61,36,42]./255;
C7=[126,15,4;122,117,119;255,163,25;135,146,73;30,93,134]./255;
colorList=C7;

C1:

C2:

C3:

C4:

C5:

C6:

C7:

绘图及修饰

这里的修饰分为坐标区域修饰以及图形对象修饰两部分,已在代码中标注好:

% 绘图
boxplot(Y,'Symbol','o','OutlierSize',3,'Colors',[0,0,0]);

% 坐标区域属性设置
ax=gca;hold on;
ax.LineWidth=1.1;
ax.FontSize=11;
ax.FontName='Arial';
ax.XTickLabel={'AA','BB','CC','DD','EE','FF'};
ax.Title.String='Title of Paired BoxPlot';
ax.Title.FontSize=13;
ax.YLabel.String='expression of XXX';

% 修改线条粗细
lineObj=findobj(gca,'Type','Line');
for i=1:length(lineObj)
    lineObj(i).LineWidth=1;
    lineObj(i).MarkerFaceColor=[1,1,1].*.3;
    lineObj(i).MarkerEdgeColor=[1,1,1].*.3;
end

% 为箱线图的框上色
boxObj=findobj(gca,'Tag','Box');
for i=1:length(boxObj)
    patch(boxObj(i).XData,boxObj(i).YData,colorList(length(boxObj)+1-i,:),'FaceAlpha',0.5,...
        'LineWidth',1.1);
end

% 绘制配对线
X=ones(size(Y)).*(1:size(Y,2));
plot(X',Y','Color',[0,0,0,.3],'Marker','o','MarkerFaceColor',[1,1,1].*.3,...
    'MarkerEdgeColor',[1,1,1].*.3,'MarkerSize',3,'LineWidth',.6)

完整代码

% pairboxplot

% 随机构造一组数据
PntSet1=sort(mvnrnd(0,2,25));
PntSet2=sort(mvnrnd(.5,2.5,25));
PntSet3=sort(mvnrnd(0,2,25));
PntSet4=sort(mvnrnd(.5,2.5,25));
% Y=[PntSet1,PntSet2];
Y=[PntSet1,PntSet2,PntSet3,PntSet4];

% 配色列表
C1=[59 125 183;244 146 121;242 166 31;180 68 108;220 211 30]./255;
C2=[102,173,194;36,59,66;232,69,69;194,148,102;54,43,33]./255;
C3=[38,140,209;219,51,46;41,161,153;181,138,0;107,112,196]./255;
C4=[110,153,89;230,201,41;79,79,54;245,245,245;199,204,158]./255;
C5=[235,75,55;77,186,216;2,162,136;58,84,141;245,155,122]./255;
C6=[23,23,23;121,17,36;44,9,75;31,80,91;61,36,42]./255;
C7=[126,15,4;122,117,119;255,163,25;135,146,73;30,93,134]./255;
colorList=C7;


% 绘图
boxplot(Y,'Symbol','o','OutlierSize',3,'Colors',[0,0,0]);

% 坐标区域属性设置
ax=gca;hold on;
ax.LineWidth=1.1;
ax.FontSize=11;
ax.FontName='Arial';
ax.XTickLabel={'AA','BB','CC','DD','EE','FF'};
ax.Title.String='Title of Paired BoxPlot';
ax.Title.FontSize=13;
ax.YLabel.String='expression of XXX';

% 修改线条粗细
lineObj=findobj(gca,'Type','Line');
for i=1:length(lineObj)
    lineObj(i).LineWidth=1;
    lineObj(i).MarkerFaceColor=[1,1,1].*.3;
    lineObj(i).MarkerEdgeColor=[1,1,1].*.3;
end

% 为箱线图的框上色
boxObj=findobj(gca,'Tag','Box');
for i=1:length(boxObj)
    patch(boxObj(i).XData,boxObj(i).YData,colorList(length(boxObj)+1-i,:),'FaceAlpha',0.5,...
        'LineWidth',1.1);
end

% 绘制配对线
X=ones(size(Y)).*(1:size(Y,2));
plot(X',Y','Color',[0,0,0,.3],'Marker','o','MarkerFaceColor',[1,1,1].*.3,...
    'MarkerEdgeColor',[1,1,1].*.3,'MarkerSize',3,'LineWidth',.6)

以上就是Matlab实现好看的配对箱线图的绘制的详细内容,更多关于Matlab配对箱线图的资料请关注脚本之家其它相关文章!

相关文章

  • Matlab实现四种HSV色轮图绘制的示例代码

    Matlab实现四种HSV色轮图绘制的示例代码

    色轮图就是色彩相位图,它完整表现了色相环360度的全部颜色。本文将利用Matlab语言绘制四种不同的HSV色轮图,感兴趣的可以动手尝试一下
    2022-07-07
  • boost.asio框架系列之调度器io_service

    boost.asio框架系列之调度器io_service

    这篇文章介绍了boost.asio框架系列之调度器io_service,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-06-06
  • C++细讲深浅拷贝与初始化列表如何操作

    C++细讲深浅拷贝与初始化列表如何操作

    C++对象特性里的拷贝构造函数有更深入的含义,而且面试曾经问过关于拷贝的析构问题,那么今天就好好解析一下深浅拷贝的问题;还有初始化列表的形式,这个在给对象属性初始化的时候非常方便,建议大家熟练掌握,话不多说,开始正文
    2022-05-05
  • C++构造函数初始化列表的实现详解

    C++构造函数初始化列表的实现详解

    构造函数主要作用在于创建对象时为对象的成员属性赋值,构造函数由编译器自动调用,无须手动调用;析构函数主要作用在于对象销毁前系统自动调用,执行一 些清理工作
    2022-09-09
  • 一篇文章带你了解C++智能指针详解

    一篇文章带你了解C++智能指针详解

    这篇文章主要介绍了c++ 智能指针基础的相关资料,帮助大家更好的理解和学习使用c++,感兴趣的朋友可以了解下,希望能给你带来帮助
    2021-08-08
  • C语言中pthread_exit和pehread_join的使用

    C语言中pthread_exit和pehread_join的使用

    pthread_exit用于强制退出一个线程,pthread_join用于阻塞等待线程退出,获取线程退出状态,本文主要介绍了C语言中pthread_exit和pehread_join函数的使用,具有一定的参考价值,感兴趣的可以了解一下
    2024-02-02
  • makefile如何调用静态库的方法实现

    makefile如何调用静态库的方法实现

    这篇文章主要介绍了makefile如何调用静态库的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12
  • C++单例模式应用实例

    C++单例模式应用实例

    这篇文章主要介绍了C++单例模式应用实例,详细讲述了单例模式的原理与结构,及相关的打印机应用实例,需要的朋友可以参考下
    2014-10-10
  • 深入理解C++中的new和delete并实现对象池

    深入理解C++中的new和delete并实现对象池

    这篇文章主要介绍了C++中的new和delete并实现对象池,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-09-09
  • 深入探究协程在C++中的实现方式

    深入探究协程在C++中的实现方式

    协程可以被看作是计算机程序中的独立功能块,它们在执行过程中能够暂停和恢复,与传统的函数调用相比,协程更像是一种轻量级的线程,本文我们将深入探究协程在C++中的实现方式,文中有详细的代码示例供大家参考,需要的朋友可以参考下
    2023-12-12

最新评论