服务器之家:专注于VPS、云服务器配置技术及软件下载分享
分类导航

PHP教程|ASP.NET教程|Java教程|ASP教程|编程技术|正则表达式|C/C++|IOS|C#|Swift|Android|VB|R语言|JavaScript|易语言|vb.net|

服务器之家 - 编程语言 - C/C++ - Matlab绘制雨云图的方法详解

Matlab绘制雨云图的方法详解

2022-12-02 15:29slandarer C/C++

这篇文章主要介绍了如何利用Matlab实现雨云图的绘制,文中的示例代码讲解详细,对我们学习Matlab有一定的帮助,需要的可以参考一下

介绍

写了俩代码模板,用来绘制横向云雨图与纵向云雨图,云雨图其实就是用把小提琴图拆开来的模板,想获取小提琴图绘制函数的可以看这里:基于Matlab绘制小提琴图的示例代码

后面的俩模板用的时候只需要换换数据,颜色及每一类名称即可,雨云图绘制效果如下:

Matlab绘制雨云图的方法详解

横向雨云图

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
function rainCloudsTMPL1
% @author: slandarer
 
 
% 在这里放入你的数据=======================================================
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'};  % 各个数据类的名称,可空着
 
% 颜色列表
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]);
end
if isempty(dataName)
    for i=1:classNum
        dataName{i}=['class',num2str(i)];
    end
end
 
% 坐标区域修饰
hold 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)
end
% 绘制图例
lgd=legend(patchCell,dataName);
lgd.Location='best';
end

Matlab绘制雨云图的方法详解

纵向雨云图

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
function rainCloudsTMPL2
% @author: slandarer
 
 
% 在这里放入你的数据=======================================================
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'};  % 各个数据类的名称,可空着
 
% 颜色列表
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]);
end
if isempty(dataName)
    for i=1:classNum
        dataName{i}=['class',num2str(i)];
    end
end
 
% 坐标区域修饰
hold 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)
end
% 绘制图例
lgd=legend(patchCell,dataName);
lgd.Location='best';
end

Matlab绘制雨云图的方法详解

到此这篇关于Matlab绘制雨云图的方法详解的文章就介绍到这了,更多相关Matlab雨云图内容请搜索服务器之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持服务器之家!

原文链接:https://mp.weixin.qq.com/s/na78cit9pXVnSF23R2EesA

延伸 · 阅读

精彩推荐
  • C/C++C++中const的特性的使用

    C++中const的特性的使用

    这篇文章主要介绍了C++中const的特性的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着...

    怎因一双媚眼惹尘埃4782021-09-03
  • C/C++C++ Primer Plus 第四章之C++ Primer Plus复合类型学习笔记

    C++ Primer Plus 第四章之C++ Primer Plus复合类型学习笔记

    数组(array)是一种数据格式,能够存储多个同类型的值。每个值都存储在一个独立的数组元素中,计算机在内存中依次存储数组的各个元素,今天给大家...

    Soler索莱尔HO10982021-12-03
  • C/C++vscode 配置 C/C++ 编译环境的详细图文教程

    vscode 配置 C/C++ 编译环境的详细图文教程

    这篇文章主要介绍了vscode 配置 C/C++ 编译环境的详细教程,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值...

    yuuxeun8892021-09-06
  • C/C++C++顺序表的基本操作实现

    C++顺序表的基本操作实现

    大家好,本篇文章主要讲的是C++顺序表的基本操作实现,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下...

    通过计算机改变世界9202022-09-19
  • C/C++C语言 数据结构双向链表简单实例

    C语言 数据结构双向链表简单实例

    这篇文章主要介绍了C语言 数据结构双向链表简单实例的相关资料,需要的朋友可以参考下...

    C语言中文网7332021-05-04
  • C/C++详解_beginthreadex()创建线程

    详解_beginthreadex()创建线程

    这篇文章主要介绍了详解_beginthreadex()创建线程,使用_beginthreadex(),需要的头文件支持#include 下面我们就来看看具体的实现吧...

    学步园3722022-08-05
  • C/C++详细理解C语言的函数栈帧

    详细理解C语言的函数栈帧

    这篇文章主要为大家介绍了C语言的函数栈帧,具有一定的参考价值,感兴趣的小伙伴们可以参考一下,希望能够给你带来帮助,希望能够给你带来帮助...

    Ssorrymaker6242022-03-01
  • C/C++类成员函数的重载、覆盖与隐藏之间的区别总结

    类成员函数的重载、覆盖与隐藏之间的区别总结

    以下是对类成员函数的重载、覆盖与隐藏之间的区别进行了详细的总结分析,需要的朋友可以过来参考下。希望对大家有所帮助...

    C语言教程网8792021-01-04