基于Matlab实现山脊图的绘制

目录
  • 纯色山脊图模板
  • 渐变色山脊图模板

写了一个用于绘制山脊图的模板,仅需要往需要填写数据的区域填入数据点击运行即可,以下提供两款模板,第一款为纯色模板而第二款为渐变色模板:

纯色山脊图模板

模板代码:

function ridgeMapTMPL1
% @author: slandarer

% 在这里放入你的数据=======================================================
X1=normrnd(2,2,1,1000);
X2=[normrnd(4,4,1,1000),normrnd(5,2,1,200)];
X3=[normrnd(2.5,2,1,1000),normrnd(6,4,1,200)];
X4=[normrnd(1,1,1,300),normrnd(2,4,1,200)];
X5=[normrnd(4,2,1,300),normrnd(2,4,1,600)];

% 把数据放到元胞数组,要是数据太多可写循环放入
dataCell={X1,X2,X3,X4,X5};    

% 各个数据类的名称,可空着
dataName={'A','B','C','D','E'};

% 各个山脊的颜色,可空着也可只放一个颜色
colorList=[];                  

% 非必要属性
% -------------------------------------------------------------------------
legendOn=false;  % 是否绘制图例 true/false
xTickOn=true;    % 开启X轴

sep=1/6;         % 设置山脊距离,可空着
xLim=[];         % 设置X轴范围距离,可空着
axColor=[];      % 设置背景颜色,可空着
fontName='';     % 设置X,Y轴标签字体,可空着
fontSize=14;     % 设置X,Y轴标签字号,可空着
faceAlpha=1;           % 面透明度
edgeColor=[1,1,1].*.3; % 边缘颜色
% =========================================================================

% 设置颜色
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(sep)
sep=1/6;
end

hold on
ax=gca;
ax.YGrid='on';
ax.YLim=[0,sep*classNum+sep/2];
ax.YTick=0:sep:sep*(classNum-1);
ax.YColor='none';
ax.LineWidth=1.2;
% ax.YTickLabel=dataName;
if isempty(fontName),fontName='Helvetica';end
if isempty(fontSize),fontSize=14;end
ax.FontName=fontName;
ax.FontSize=fontSize;
if ~xTickOn,ax.XColor='none';end
if ~isempty(xLim),ax.XLim=xLim;end
if ~isempty(axColor),ax.Color=axColor;end
if isempty(dataName)
    for i=1:classNum
        dataName{i}=num2str(i);
    end
end

% 绘制山脊
for i=1:classNum
    tX=dataCell{i};tX=tX(:);
    [F,Xi]=ksdensity(tX);
    patchCell(i)=fill([Xi(1),Xi,Xi(end)],[0,F,0]+(sep).*(classNum-i).*ones(1,length(F)+2),...
        colorList(i,:),'EdgeColor','none','FaceAlpha',faceAlpha);
    plot([Xi(1),Xi,Xi(end)],[0,F,0]+(sep).*(classNum-i).*ones(1,length(F)+2),...
        'Color',edgeColor,'LineWidth',1.2)
end

% 绘制图例
if legendOn
legend(patchCell,dataName)
end

% 绘制字符
ax.UserData.classNum=classNum;
ax.UserData.sep=sep;
for k=1:classNum
    ax.UserData.(['t',num2str(k)])=text(ax.XLim(1),(sep).*(classNum-k),[dataName{k},' '],...
        'FontSize',fontSize,'FontName',fontName,'HorizontalAlignment','right','VerticalAlignment','bottom');
end
    function reTXT(~,~)
        for kk=1:ax.UserData.classNum
            ax.UserData.(['t',num2str(kk)]).Position=...
                [ax.XLim(1),(ax.UserData.sep).*(ax.UserData.classNum-kk),0];
        end
    end

set(ax.Parent,'WindowButtonMotionFcn',@reTXT);
% 额外的属性设置===========================================================
% ax.(...)=...

% =========================================================================
end

绘制效果:

更该部分配置后的绘制效果:

将每个山脊赋予不同颜色,删除X轴并添加图例

% 在这里放入你的数据=======================================================
X1=normrnd(2,2,1,1000);
X2=[normrnd(4,4,1,1000),normrnd(5,2,1,200)];
X3=[normrnd(2.5,2,1,1000),normrnd(6,4,1,200)];
X4=[normrnd(1,1,1,300),normrnd(2,4,1,200)];
X5=[normrnd(4,2,1,300),normrnd(2,4,1,600)];

% 把数据放到元胞数组,要是数据太多可写循环放入
dataCell={X1,X2,X3,X4,X5};    

% 各个数据类的名称,可空着
dataName={'A','B','C','D','E'};

% 各个山脊的颜色,可空着也可只放一个颜色
colorList=[0.98,0.70,0.95
0.69,0.81,1.00
0.50,0.88,0.89
0.50,0.87,0.61
0.86,0.82,0.50];                  

% 非必要属性
% -------------------------------------------------------------------------
legendOn=true;  % 是否绘制图例 true/false
xTickOn=false;   % 开启X轴

sep=1/6;         % 设置山脊距离,可空着
xLim=[];         % 设置X轴范围距离,可空着
axColor=[];      % 设置背景颜色,可空着
fontName=[];     % 设置X,Y轴标签字体,可空着
fontSize=14;     % 设置X,Y轴标签字号,可空着
faceAlpha=1;           % 面透明度
edgeColor=[1,1,1].*.3; % 边缘颜色
% ===============================================================

渐变色山脊图模板

模板代码:

function ridgeMapTMPL2
% @author: slandarer

% 在这里放入你的数据=======================================================
X1=normrnd(2,2,1,1000);
X2=[normrnd(4,4,1,1000),normrnd(5,2,1,200)];
X3=[normrnd(2.5,2,1,1000),normrnd(6,4,1,200)];
X4=[normrnd(1,1,1,300),normrnd(2,4,1,200)];
X5=[normrnd(4,2,1,300),normrnd(2,4,1,600)];

% 把数据放到元胞数组,要是数据太多可写循环放入
dataCell={X1,X2,X3,X4,X5};    

% 各个数据类的名称,可空着
dataName={'A','B','C','D','E'};

% 山脊的渐变颜色,可空着也放数组也可放颜色名称
cmap=[];
% cmap=PYCM().plasma();
% cmap='colorcube'

% 非必要属性
% -------------------------------------------------------------------------
xTickOn=true;    % 开启X轴

sep=1/6;         % 设置山脊距离,可空着
xLim=[];         % 设置X轴范围距离,可空着
fontName='';     % 设置X,Y轴标签字体,可空着
fontSize=14;     % 设置X,Y轴标签字号,可空着
% =========================================================================

classNum=length(dataCell);

% 设置间隙距离
if isempty(sep)
sep=1/6;
end

hold on
ax=gca;
ax.YGrid='on';
ax.YLim=[0,sep*classNum+sep/2];
ax.YTick=0:sep:sep*(classNum-1);
ax.YColor='none';
ax.LineWidth=1.2;
% ax.YTickLabel=dataName;
if isempty(fontName),fontName='Helvetica';end
if isempty(fontSize),fontSize=14;end

ax.FontName=fontName;
ax.FontSize=fontSize;
if ~xTickOn,ax.XColor='none';end
if ~isempty(xLim),ax.XLim=xLim;end
if isempty(dataName)
    for i=1:classNum
        dataName{i}=num2str(i);
    end
end

% 绘制山脊
for i=1:classNum
    tX=dataCell{i};tX=tX(:);
    [F,Xi]=ksdensity(tX);
    patchCell(i)=patch([Xi(1),Xi,Xi(end)],[0,F,0]+(sep).*(classNum-i).*ones(1,length(F)+2),...
        [Xi(1),Xi,Xi(end)],'FaceColor','interp','EdgeColor','none');
    plot([Xi(1),Xi,Xi(end)],[0,F,0]+(sep).*(classNum-i).*ones(1,length(F)+2),...
        'Color',[.3,.3,.3],'LineWidth',1.2)
end
if isempty(cmap)
colormap()
else
colormap(cmap)
end

% 绘制字符
ax.UserData.classNum=classNum;
ax.UserData.sep=sep;
for k=1:classNum
    ax.UserData.(['t',num2str(k)])=text(ax.XLim(1),(sep).*(classNum-k),[dataName{k},' '],...
        'FontSize',fontSize,'FontName',fontName,'HorizontalAlignment','right','VerticalAlignment','bottom');
end
    function reTXT(~,~)
        for kk=1:ax.UserData.classNum
            ax.UserData.(['t',num2str(kk)]).Position=...
                [ax.XLim(1),(ax.UserData.sep).*(ax.UserData.classNum-kk),0];
        end
    end

set(ax.Parent,'WindowButtonMotionFcn',@reTXT);
% 额外的属性设置===========================================================
% ax.(...)=...

% =========================================================================
end

绘制效果:

使用MATLAB自带颜色:

例:将cmap=[]改为:

cmap='summer'

cmap='colorcube'

使用PYCM函数:

例:将cmap=[]改为:

cmap=PYCM().plasma()

到此这篇关于基于Matlab实现山脊图的绘制的文章就介绍到这了,更多相关Matlab山脊图内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • 如何利用Matlab绘制出好看的火山图

    这里画了一个示例: 数据来源 绘制效果: 代码及说明: 使用代码时只需要改一开始导入的数据,和代码提示中X坐标区域范围和Y坐标区域范围,完整代码如下所示: % 读取数据 data=readmatrix('volcano.txt'); logFC=data(:,2); padj=data(:,3); DB_not=(padj>0.5)|(logFC<0.5&logFC>-0.5); DB_up=padj<=0.05&logFC>=0.5; DB_down=pad

  • Matlab绘制散点密度图的教程详解

    目录 效果 1工具函数完整代码 2参数说明 3使用方式 3.1散点赋色 3.2等高线图 3.3带直方图的散点图 3.4带直方图的等高线图 4使用方式扩展–与ggplot修饰器联动 效果 原理也很简单,通过matlab自带的ksdensity获得网格每一点密度,通过密度拟合曲面,再计算每个数据点对应的概率,并将概率映射到颜色即可为了怕大家找不到函数这次工具函数放到最前面 1工具函数完整代码 function [CData,h,XMesh,YMesh,ZMesh,colorList]=density

  • 详解Matlab如何绘制桑基图

    目录 详细用法 1使用示例 2输入参数 3输出 函数完整代码 使用示例代码 这次主要是分享自己写的一个函数,用来绘制桑基图,效果大概是下面这样子: 先说明函数(sankey2)怎么用,函数完整代码放在博客最后 详细用法 1 使用示例 新建一个m文件,运行如下代码 List={'a1',1,'A'; 'a2',1,'A'; 'a3',1,'A'; 'a3',0.5,'C'; 'b1',1,'B'; 'b2',1,'B'; 'b3',1,'B'; 'c1',1,'C'; 'c2',1,'C'; 'c

  • 详解Matlab如何绘制小提琴图

    目录 1使用示例 基础使用,Y为矩阵 基础使用,Y为向量,X为标签 基础使用多个图像绘制,并添加图例 2完整代码 写了个matlab绘制小提琴图的函数: 1.图中小提琴状区域为核密度曲线 2.白色方块为25%,75%分位数 3.中间横线为中位数 4.白色点为离群值点 5.竖着的黑线是去掉离群值点后点的上下限 1使用示例 基础使用,Y为矩阵 X=1:5; Y=randn(100,5); Hdl1=violinChart(gca,X,Y,[0 0.447 0.741],0.6); X:横坐标 Y:数

  • 基于Matlab绘制洛伦兹吸引子相图

    目录 1.公式及Lorenz函数 2.混沌吸引子图像 3.混沌吸引子图像 4.封面图绘制 洛伦兹吸引子(Lorenz attractor)是由MIT大学的气象学家Edward Lorenz在1963年给出的,他给出第一个混沌现象——蝴蝶效应........废话不多说. 反正咱就是,好看且有用咱就写代码,第零部分给出公式.第一部分给出 混沌吸引子 图像,第二部分给出庞加莱截面法 分岔图 绘制. 1.公式及Lorenz函数 Lorenz微分方程组定义如下: 非常容易能写出该微分方程组函数: func

  • 基于Matlab实现山脊图的绘制

    目录 纯色山脊图模板 渐变色山脊图模板 写了一个用于绘制山脊图的模板,仅需要往需要填写数据的区域填入数据点击运行即可,以下提供两款模板,第一款为纯色模板而第二款为渐变色模板: 纯色山脊图模板 模板代码: function ridgeMapTMPL1 % @author: slandarer % 在这里放入你的数据======================================================= X1=normrnd(2,2,1,1000); X2=[normrnd(4

  • 基于Echart实现折线图的绘制详解

    效果图 不显示折线图上的拐点方法 ,3个都可以使用,代码中有显示在什么位置使用. symbolSize:0, symbol:“none”, showSymbol:false, 代码: var mess = ["00:00", "03:00", "06:00", "09:00", "12:00", "15:00", "18:00", "21:00",

  • 基于Matlab绘制小提琴图的示例代码

    目录 violinChart 函数使用方法 基础使用,Y为矩阵 基础使用,Y为向量,X为标签 基础使用,多个图像绘制,并添加图例 violinChart 完整函数 ggtheme violin 函数介绍 ggtheme violin 主题 ggtheme violin 修饰函数代码 本文将为大家详细讲解Matlab中小提琴图的绘制函数及ggtheme主题修饰函数 violinChart 函数使用方法 写了个matlab绘制小提琴图的函数: 1.图中小提琴状区域为核密度曲线. 2.白色方块为25%

  • 基于Matlab实现离散系统分岔图的绘制

    目录 1.一维离散分岔图 2.二维离散分岔图 3.封面图绘制 1.一维离散分岔图 一维那非常简单哈,就循环着画呗,以下举两个简单的例子 : % x(n+1)=1-r*x(n)^2 % (r∈(0,2),x∈[-1,1])的分支混沌图. hold on f=@(x,r)1-r.*x.^2; r=0:.01:2; x=0; % x初值 for n=1:1000 x=f(x,r); if n>100 % 稳定后开始绘图 plot(r,x,'k.','MarkerSize',1); drawnow en

  • 基于Matlab绘制超绚丽的烟花的过程详解

    目录 1.使用效果 2.随机点生成 3.图像膨胀 4.特效「风」模拟 5.级坐标变换 6.图像模糊及再映射 7.图像上色 8.完整代码 1.使用效果 2.随机点生成 我们要构造一个黑色背景,对其添加高斯噪声,然后依据阈值删掉部分噪声,生成一张随机点图片: % 构造黑色背景并生成白色杂点 blackPic=uint8(zeros(800,800)); distPic=imnoise(blackPic,'gaussian',0, 0.11); distPic(distPic<254)=0; 3.图像

  • 基于Matlab实现绘制3D足球的示例代码

    目录 绘制讲解 数据来源及说明 硬算顶点连接情况 三角剖分 正交变换 充气 完整代码 世界杯教你用MATLAB画个超逼真的足球, 需要准备Partial Differential Equation Toolbox工具箱,同时因为用到了polyshape类所以至少需要R2017b版本. 绘制讲解 数据来源及说明 我是真的不想写注释了太麻烦了,给大家讲一下我的思路希望能够看懂,首先足球的数据点是通过: [B,XYZ]=bucky; 导入的,但是导入的只有边链接信息,并没有给出哪几个点构成正五边形哪几

  • python数据可视化Seaborn绘制山脊图

    目录 1. 引言 2. 举个栗子 3.山脊图 4.扩展 5.结论 1. 引言 山脊图一般由垂直堆叠的折线图组成,这些折线图中的折线区域间彼此重叠,此外它们还共享相同的x轴. 山脊图经常以一种相对不常见且非常适合吸引大家注意力的紧凑图的形式表现.观察上图,我们给其起名叫Ridge plot是非常恰当的,因为上述图表看起来确实很像山的脊背.此外,上述图像还有另一个称呼叫做Joy Plots–这主要是因为Joy Division乐队在如下专辑封面上采用了这种可视化形式. 2. 举个栗子 在介绍完山脊图

  • Python&Matlab实现伏羲八卦图的绘制

    目录 1 与达尔文对话 2 与老子对话 2.1 Python实现 2.2 Matlab实现 1 与达尔文对话 140年前,1858年7月1日,达尔文在英伦岛发表了自己有关自然选择的杰出论文.他提出,生物的发展规律是物竞天择.经过物竞,自然界选择并存留最具生命优势的物种.这些物种愈竞愈强.直至人,已无所不能,成为统治世界的物种,这已是不争的事实.但在地球的漫长的演化史上,我们又看见,曾经统治地球的庞然大物恐龙消亡了.一-些科学家将其归之于小行星对地球的撞击.但就在我们这一代人眼前,兽中之王的老虎正

  • 详解Matlab实现动态表白图的绘制

    目录 1.幸福和快乐的哲学追问 2.提前祝女朋友节日快乐 2.1 展现 2.2 代码 1.幸福和快乐的哲学追问 在过去的500年间,我们见证了一连串令人惊叹的革命.地球在生态和历史上都已经整合成一个单一的领域.经济呈现指数增长,今日人类所享有的财富在过去只有可能出现在童话里.而科学和工业革命也带给我们超人类的力量,以及几乎可以说无限的能源.不仅社会秩序完全改变,政治.日常生活和人类心理也彻底改观. 只不过,我们真的更快乐了吗?人类在过去5世纪间积蓄的财富,是不是真的让我们找到了新的满足感?有了取

随机推荐