【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绘制雨云图

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/424457.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

jdk的安装和Tomcat的安装

jdk的安装 双击jdk,然后一路下一步 公共JRE可以关闭,没多大用,反而会占用内存 计算机–>属性–>高级系统设置–>环境变量 系统变量–新建 JAVA_HOMEjdk的存放路径 修改path 在path的最后面添加(;%JAVA_H…

云原生全栈监控解决方案(全面详解)

【作者】JasonXu 前言 当前全球企业云化、数字化进程持续加速,容器、微服务等云原生技术在软件架构中快速渗透,IT 架构云化、复杂化持续驱动性能监控市场。企业云化、数字化持续转型,以及为了考虑系统的弹性、效率,企业软件开发中…

开源的测试平台快2千星了,能带来多少收益呢

最近看了下自己去年初开源的测试平台,star一起算的话也到1.7k了: 做开源的初心一方面是想把自己的理解和思想展示出来,另一方面是想进一步打造个人IP,提升影响力(其实这个想法很早之前就有了,计划过无数次但…

蓝桥杯重要知识点和赛题直通车

<蓝桥杯软件赛>零基础备赛20周 第 1周(2023-10-23): 蓝桥杯软件赛介绍官方链接零基础能得奖吗&#xff1f; 第 2周(2023-10-30): 常考知识点蓝桥杯怎么判题备赛计划 第 3周(2023-11-06): 填空题&#xff08;分数少但越来越不好做&#xff09; 第 4周(2023-11-13): &#…

在线培训系统如何帮助企业降低培训成本?

随着科技的不断发展和互联网的普及&#xff0c;在线培训系统越来越被企业所重视并广泛应用。这一系统能够帮助企业降低培训成本&#xff0c;提高培训效果&#xff0c;具有诸多优势。 在线培训系统能够减少企业的培训场地和设备成本。传统的培训通常需要租赁大型场地以容纳许多参…

Python 自动化办公:一键批量生成 PPT

Stata and Python 数据分析 一、导读 在实际工作中&#xff0c;经常需要批量处理Office文件&#xff0c;比如需要制作一个几十页的PPT进行产品介绍时&#xff0c;一页一页地制作不仅麻烦而且格式可能不统一。那么有什么办法可以一键生成PPT呢&#xff1f;Python提供的pptx 包…

技术浪潮中的职业变革:程序员面临的裁员挑战与应对策略

目录 前言 冲破时空壁垒&#xff1a;探索技术变革的酷时代&#xff01; 逆境成长&#xff1a;一个互联网人战胜失业困境的故事 裁员的双面影响&#xff1a;挑战与机遇 应对裁员潮危机&#xff1a;程序员的超级英雄之路 前言 惊人的新闻传来&#xff0c;一对来自中国的工程师…

TOP 10无代码开发工具,谁是你的最佳选择?

随着科技的日新月异&#xff0c;无代码平台已成为软件开发领域中的香饽饽&#xff0c;它们通过图形化界面与预设组件&#xff0c;让无需深入代码的用户也能轻松参与软件开发。接下来&#xff0c;我们将为您详细介绍十个值得关注的免费无代码平台。 1. 云表平台 云表平台&…

【数据结构】从顺序表到ArrayList类

文章目录 1.线性表1.1线性表的概念2.顺序表2.1顺序表的概念2.2顺序表的实现2.3接口的实现(对数组增删查改操作)3.ArrayList简介4. ArrayList使用 4.1ArrayList的构造4.2 ArrayList的方法4.3 ArrayList的遍历 1.线性表 1.1线性表的概念 线性表&#xff08;linear list&#xf…

LeetCode刷题---最长交替子数组

解题思路&#xff1a; 该题使用双指针的思想来解决 首先慢指针指向0&#xff0c;快指针指向1 遍历快指针从1遍历到nums.length-1 根据题意得如果快指针的索引为奇数&#xff0c;则nums[fast]nums[slow]1,偶数则&#xff0c;nums[fast]nums[slow] 如果上述条件不符合&#xff0c…

c++:string相关的oj题(415. 字符串相加、125. 验证回文串、541. 反转字符串 II、557. 反转字符串中的单词 III)

文章目录 1. 415. 字符串相加题目详情代码1思路1代码2思路2 2. 125. 验证回文串题目详情代码1&#xff08;按照要求修改后放到新string里&#xff09;思路1代码2(利用双指针/索引)思路2 3. 541. 反转字符串 II题目详情代码1思路1 4. 557. 反转字符串中的单词 III题目详情代码1&…

Linux包的管理(RPM和YUM)

记得看目录哦&#xff01; 1. rpm包的管理1.1 rpm包的指令1.2 卸载rpm包1.3 安装rpm包 2. yum包的管理 1. rpm包的管理 1.1 rpm包的指令 1.2 卸载rpm包 1.3 安装rpm包 2. yum包的管理