
【MATLAB基础绘图第20棒】云雨图(Raincloud plots)
发布日期:2021-05-17 21:26:02
浏览次数:28
分类:原创文章
本文共 5207 字,大约阅读时间需要 17 分钟。
MATLAB绘制云雨图
云雨图(Raincloud plots)
云雨图(Raincloud plots)其实是可以看成核密度估计曲线图、箱形图和抖动散点图的组合图,清晰、完整、美观地展示了所有数据信息。
本质上是一个混合图,可同时将原始数据、数据分布和关键汇总统计表现出来,由对分的小提琴图(Violin plot)、箱线图(boxplot)和作为某种散点的原始数据组成。
MATLAB绘制云雨图
横向云雨图
成图如下:
MATLAB代码如下:
clcclose allclear%% 函数说明-绘制云雨图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.5059 0.9176 0.5569 0.4627 0.7020 0.4784 0.5451 0.4863 0.4314 0.5490]; % =========================================================================classNum=length(dataCell);if size(colorList,1)==0 colorList=repmat([130,170,172]./255,[classNum,1]);else colorList=repmat(colorList,[ceil(classNum/size(colorList,1)),1]);endif isempty(dataName) for i=1:classNum dataName{i}=['class',num2str(i)]; endendfigure(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:classNum tX=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代码如下:
clcclose allclear%% 函数说明-绘制云雨图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.5059 0.9176 0.5569 0.4627 0.7020 0.4784 0.5451 0.4863 0.4314 0.5490]; % =========================================================================classNum=length(dataCell);if size(colorList,1)==0 colorList=repmat([130,170,172]./255,[classNum,1]);else colorList=repmat(colorList,[ceil(classNum/size(colorList,1)),1]);endif isempty(dataName) for i=1:classNum dataName{i}=['class',num2str(i)]; endendfigure(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:classNum tX=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、微信公众号-
发表评论
最新留言
第一次来,支持一个
[***.219.124.196]2025年05月05日 20时57分37秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
MapReduce程序依赖的jar包
2025-04-12
MapReduce程序(一)——wordCount
2025-04-12
MapReduce:大数据处理的范式
2025-04-12
MapStruct 对象间属性复制
2025-04-12
MapStruct 映射过程中忽略某个字段
2025-04-12
MapStruct 超神进阶用法,让你的代码效率提升十倍!
2025-04-12
MapStruct使用工具类中的方法来映射字段
2025-04-12
MapXtreme 2005 学习心得 一些基础函数代码(四)
2025-04-12
Map中key和value值是否可以为null或空字符串?
2025-04-12
map函数
2025-04-12
map反转key value
2025-04-12
map和bean的相互转换
2025-04-12
map和filter使用方法与区别
2025-04-12
map和weakMap的区别
2025-04-12
Map如何获取所有value的值
2025-04-12
Map存入的数据丢失类型任意
2025-04-12
Map排序
2025-04-12
Map的深浅拷贝的探究
2025-04-12
Map的遍历方式
2025-04-12
map遍历测试结果
2025-04-12