【MATLAB基础绘图第20棒】云雨图

2024-01-24 03:12
文章标签 基础 matlab 绘图 20 云雨

本文主要是介绍【MATLAB基础绘图第20棒】云雨图,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

MATLAB绘制云雨图

  • 云雨图(Raincloud plots)
  • MATLAB绘制云雨图
    • 横向云雨图
    • 竖向云雨图
  • 参考

云雨图(Raincloud plots)

云雨图(Raincloud plots)其实是可以看成核密度估计曲线图、箱形图和抖动散点图的组合图,清晰、完整、美观地展示了所有数据信息。
本质上是一个混合图,可同时将原始数据、数据分布和关键汇总统计表现出来,由对分的小提琴图(Violin plot)、箱线图(boxplot)和作为某种散点的原始数据组成。

MATLAB绘制云雨图

横向云雨图

成图如下:
在这里插入图片描述
MATLAB代码如下:

clc
close all
clear
%% 函数说明-绘制云雨图pathFigure= '.\Figures\' ;
figureUnits = 'centimeters';
figureWidth = 20; 
figureHeight = 10;% 导入数据
X1=[normrnd(8,4,1,120),normrnd(5,2,1,25)];
X2=[normrnd(2.5,3,1,75),normrnd(6,4,1,25),normrnd(15,1,1,100)];
X3=[normrnd(4,3,1,40),normrnd(3,4,1,25)];
X4=[normrnd(4,3,1,40),normrnd(2,4,1,75)];dataCell={X1,X2,X3,X4};           % 把数据放到元胞数组,要是数据太多可写循环放入  
dataName={'A','B','C','D'};        % 各个数据类的名称,可空着%% 绘制横向云雨图rainCloudsH(dataCell, dataName)str= strcat(pathFigure, "图1 "+"横向云雨图", '.tiff');
print(gcf, '-dtiff', '-r600', str);
%% 调用函数function rainCloudsH(dataCell, dataName)% 颜色列表
colorList=[0.9294    0.7569    0.50590.9176    0.5569    0.46270.7020    0.4784    0.54510.4863    0.4314    0.5490];      
% =========================================================================classNum=length(dataCell);
if size(colorList,1)==0colorList=repmat([130,170,172]./255,[classNum,1]);
elsecolorList=repmat(colorList,[ceil(classNum/size(colorList,1)),1]);
end
if isempty(dataName)for i=1:classNumdataName{i}=['class',num2str(i)];end
endfigure(1)
% 坐标区域修饰
hold on; box on;
ax=gca;
ax.YLim=[1/2,classNum+2/3];
ax.YTick=1:classNum;
ax.LineWidth=1.2;
ax.YTickLabels=dataName(end:-1:1);
ax.FontSize=14;rate=3.5;% 绘制雨云图
for i=1:classNumtX=dataCell{i};tX=tX(:);[F,Xi]=ksdensity(tX);% 绘制山脊图patchCell(i)=fill([Xi(1),Xi,Xi(end)],0.2+[0,F,0].*rate+(classNum+1-i).*ones(1,length(F)+2),...colorList(i,:),'EdgeColor',[0,0,0],'FaceAlpha',0.8,'LineWidth',1.2);% 其他数据获取qt25=quantile(tX,0.25); % 下四分位数qt75=quantile(tX,0.75); % 上四分位数med=median(tX);         % 中位数outliBool=isoutlier(tX,'quartiles');  % 离群值点nX=tX(~outliBool);                    % 95%置信内的数% 绘制箱线图plot([min(nX),max(nX)],[(classNum+1-i),(classNum+1-i)],'k','lineWidth',1.2);fill([qt25,qt25,qt75,qt75],(classNum+1-i)+[-1 1 1 -1].*0.12,colorList(i,:),'EdgeColor',[0 0 0]);plot([med,med],[(classNum+1-i)-0.12,(classNum+1-i)+0.12],'Color',[0,0,0],'LineWidth',2.5)% 绘制散点 tY=(rand(length(tX),1)-0.5).*0.24+ones(length(tX),1).*(classNum+1-i);scatter(tX,tY,15,'CData',colorList(i,:),'MarkerEdgeAlpha',0.15,...'MarkerFaceColor',colorList(i,:),'MarkerFaceAlpha',0.1)
endset(gca,'FontName','Times New Roman','FontSize',14, 'Layer','top','LineWidth',1);% 绘制图例
hl = legend(patchCell,dataName);
set(hl,'Box','off','location','northOutside','NumColumns',4,'FontSize',16,'FontName','Times New Roman');    end

竖向云雨图

成图如下:
在这里插入图片描述

MATLAB代码如下:

clc
close all
clear
%% 函数说明-绘制云雨图pathFigure= '.\Figures\' ;
figureUnits = 'centimeters';
figureWidth = 20; 
figureHeight = 10;% 导入数据
X1=[normrnd(8,4,1,120),normrnd(5,2,1,25)];
X2=[normrnd(2.5,3,1,75),normrnd(6,4,1,25),normrnd(15,1,1,100)];
X3=[normrnd(4,3,1,40),normrnd(3,4,1,25)];
X4=[normrnd(4,3,1,40),normrnd(2,4,1,75)];dataCell={X1,X2,X3,X4};           % 把数据放到元胞数组,要是数据太多可写循环放入  
dataName={'A','B','C','D'};        % 各个数据类的名称,可空着%% 绘制竖向云雨图
rainCloudsV(dataCell, dataName)str= strcat(pathFigure, "图2 "+"竖向云雨图", '.tiff');
print(gcf, '-dtiff', '-r600', str);function rainCloudsV(dataCell, dataName)% 颜色列表
colorList=[0.9294    0.7569    0.50590.9176    0.5569    0.46270.7020    0.4784    0.54510.4863    0.4314    0.5490];      
% =========================================================================classNum=length(dataCell);
if size(colorList,1)==0colorList=repmat([130,170,172]./255,[classNum,1]);
elsecolorList=repmat(colorList,[ceil(classNum/size(colorList,1)),1]);
end
if isempty(dataName)for i=1:classNumdataName{i}=['class',num2str(i)];end
endfigure(2)
% 坐标区域修饰
hold on; box on;
ax=gca;
ax.XLim=[1/2,classNum+2/3];
ax.XTick=1:classNum;
ax.LineWidth=1.2;
ax.XTickLabels=dataName(end:-1:1);
ax.FontSize=14;rate=3.5;% 绘制雨云图
for i=1:classNumtX=dataCell{i};tX=tX(:);[F,Xi]=ksdensity(tX);% 绘制山脊图patchCell(i)=fill(0.2+[0,F,0].*rate+(classNum+1-i).*ones(1,length(F)+2),[Xi(1),Xi,Xi(end)],...colorList(i,:),'EdgeColor',[0,0,0],'FaceAlpha',0.8,'LineWidth',1.2);% 其他数据获取qt25=quantile(tX,0.25); % 下四分位数qt75=quantile(tX,0.75); % 上四分位数 med=median(tX);         % 中位数outliBool=isoutlier(tX,'quartiles');  % 离群值点nX=tX(~outliBool);                    % 95%置信内的数% 绘制箱线图plot([(classNum+1-i),(classNum+1-i)],[min(nX),max(nX)],'k','lineWidth',1.2);fill((classNum+1-i)+[-1 1 1 -1].*0.12,[qt25,qt25,qt75,qt75],colorList(i,:),'EdgeColor',[0 0 0]);plot([(classNum+1-i)-0.12,(classNum+1-i)+0.12],[med,med],'Color',[0,0,0],'LineWidth',2.5)% 绘制散点 tY=(rand(length(tX),1)-0.5).*0.24+ones(length(tX),1).*(classNum+1-i);scatter(tY,tX,15,'CData',colorList(i,:),'MarkerEdgeAlpha',0.15,...'MarkerFaceColor',colorList(i,:),'MarkerFaceAlpha',0.1)
endset(gca,'FontName','Times New Roman','FontSize',14, 'Layer','top','LineWidth',1);% 绘制图例
hl = legend(patchCell,dataName);
set(hl,'Box','off','location','northOutside','NumColumns',4,'FontSize',16,'FontName','Times New Roman');    
end

参考

1、微信公众号-MATLAB | 如何使用MATLAB绘制雨云图

这篇关于【MATLAB基础绘图第20棒】云雨图的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/638384

相关文章

从基础到进阶详解Python条件判断的实用指南

《从基础到进阶详解Python条件判断的实用指南》本文将通过15个实战案例,带你大家掌握条件判断的核心技巧,并从基础语法到高级应用一网打尽,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一... 目录​引言:条件判断为何如此重要一、基础语法:三行代码构建决策系统二、多条件分支:elif的魔法三、

Python WebSockets 库从基础到实战使用举例

《PythonWebSockets库从基础到实战使用举例》WebSocket是一种全双工、持久化的网络通信协议,适用于需要低延迟的应用,如实时聊天、股票行情推送、在线协作、多人游戏等,本文给大家介... 目录1. 引言2. 为什么使用 WebSocket?3. 安装 WebSockets 库4. 使用 We

从基础到高阶详解Python多态实战应用指南

《从基础到高阶详解Python多态实战应用指南》这篇文章主要从基础到高阶为大家详细介绍Python中多态的相关应用与技巧,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录一、多态的本质:python的“鸭子类型”哲学二、多态的三大实战场景场景1:数据处理管道——统一处理不同数据格式

MySQL数据类型与表操作全指南( 从基础到高级实践)

《MySQL数据类型与表操作全指南(从基础到高级实践)》本文详解MySQL数据类型分类(数值、日期/时间、字符串)及表操作(创建、修改、维护),涵盖优化技巧如数据类型选择、备份、分区,强调规范设计与... 目录mysql数据类型详解数值类型日期时间类型字符串类型表操作全解析创建表修改表结构添加列修改列删除列

Python 函数详解:从基础语法到高级使用技巧

《Python函数详解:从基础语法到高级使用技巧》本文基于实例代码,全面讲解Python函数的定义、参数传递、变量作用域及类型标注等知识点,帮助初学者快速掌握函数的使用技巧,感兴趣的朋友跟随小编一起... 目录一、函数的基本概念与作用二、函数的定义与调用1. 无参函数2. 带参函数3. 带返回值的函数4.

精选20个好玩又实用的的Python实战项目(有图文代码)

《精选20个好玩又实用的的Python实战项目(有图文代码)》文章介绍了20个实用Python项目,涵盖游戏开发、工具应用、图像处理、机器学习等,使用Tkinter、PIL、OpenCV、Kivy等库... 目录① 猜字游戏② 闹钟③ 骰子模拟器④ 二维码⑤ 语言检测⑥ 加密和解密⑦ URL缩短⑧ 音乐播放

python panda库从基础到高级操作分析

《pythonpanda库从基础到高级操作分析》本文介绍了Pandas库的核心功能,包括处理结构化数据的Series和DataFrame数据结构,数据读取、清洗、分组聚合、合并、时间序列分析及大数据... 目录1. Pandas 概述2. 基本操作:数据读取与查看3. 索引操作:精准定位数据4. Group

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Visual Studio 2022 编译C++20代码的图文步骤

《VisualStudio2022编译C++20代码的图文步骤》在VisualStudio中启用C++20import功能,需设置语言标准为ISOC++20,开启扫描源查找模块依赖及实验性标... 默认创建Visual Studio桌面控制台项目代码包含C++20的import方法。右键项目的属性:

从基础到进阶详解Pandas时间数据处理指南

《从基础到进阶详解Pandas时间数据处理指南》Pandas构建了完整的时间数据处理生态,核心由四个基础类构成,Timestamp,DatetimeIndex,Period和Timedelta,下面我... 目录1. 时间数据类型与基础操作1.1 核心时间对象体系1.2 时间数据生成技巧2. 时间索引与数据