返回顶部
首页 > 资讯 > 后端开发 > 其他教程 >Matlab实现绘制高阶版本韦恩图(upset图)
  • 259
分享到

Matlab实现绘制高阶版本韦恩图(upset图)

Matlab绘制韦恩图Matlab 韦恩图 2023-01-28 12:01:41 259人浏览 泡泡鱼
摘要

目录教程部分数据准备配色主要运算创建布局并修饰图像绘制完整代码韦恩图随着阶数升高会越来越复杂,当阶数达到7或者以上时几乎没办法绘制: 但是使用upset图却可以比较轻易的绘制:

韦恩图随着阶数升高会越来越复杂,当阶数达到7或者以上时几乎没办法绘制:

但是使用upset图却可以比较轻易的绘制:

两种类型图的对应关系:

这期便教大家如何绘制这样的upset图:

教程部分

数据准备

数据需要的是0,1矩阵,例如随机生成数据:

setName={'RB1','PIK3R1','EGFR','TP53','PTEN'};
Data=rand([200,5])>.85;

每一行代表一个对象,第一行是1,0,0,1,0说明它既属于第一类也属于第四类。

配色

配色可以是rgb数值,也可以是多行颜色,也可以用matlab自带的colORMap数据:

% 设置两个柱状图及关系连线的颜色
bar1Color=[61,58,61]./255;
bar2Color=[61,58,61]./255;
lineColor=[61,58,61]./255;

在随后的部分会更详细的讲解颜色设置。

主要运算

接下来几行就是数据统计的详细代码,小技巧有点多,这部分技巧在韦恩图绘制那篇和数据统计那篇也写到过,可以去瞅瞅,这里不详细展开:

% 进行组合统计(一顿花里胡哨的操作)
pBool=abs(dec2bin((1:(2^size(Data,2)-1))'))-48;
[pPos,~]=find(((pBool*(1-Data'))|((1-pBool)*Data'))==0);
sPPos=sort(pPos);dPPos=find([diff(sPPos);1]);
pType=sPPos(dPPos);pCount=diff([0;dPPos]);
[pCount,pInd]=sort(pCount,'descend');
pType=pType(pInd);
sCount=sum(Data,1);
[sCount,sInd]=sort(sCount,'descend');
sType=1:size(Data,2);
sType=sType(sInd);

创建布局并修饰

集合名称为中文乱码,请将字体改为宋体,若后面绘图部分显示不全请调整各个axes的XLim及YLim属性。

% 构造figure及axes
fig=figure('Units','normalized','Position',[.3,.2,.5,.63],'Color',[1,1,1]);
axI=axes('Parent',fig);hold on;
set(axI,'Position',[.33,.35,.655,.61],'LineWidth',1.2,'Box','off','TickDir','out',...
    'FontName','Times New Roman','FontSize',12,'XTick',[],'XLim',[0,length(pType)+1])
axI.YLabel.String='Intersection Size';
axI.YLabel.FontSize=16;
%
axS=axes('Parent',fig);hold on;
set(axS,'Position',[.01,.08,.245,.26],'LineWidth',1.2,'Box','off','TickDir','out',...
    'FontName','Times New Roman','FontSize',12,'YColor','none','YLim',[.5,size(Data,2)+.5],...
    'YAxisLocation','right','XDir','reverse','YTick',[])
axS.XLabel.String='Set Size';
axS.XLabel.FontSize=16;
%
axL=axes('Parent',fig);hold on;
set(axL,'Position',[.33,.08,.655,.26],'YColor','none','YLim',[.5,size(Data,2)+.5],'XColor','none','XLim',axI.XLim)

图像绘制

% 相交关系统计图 -----------------------------------------------------------
barHdlI=bar(axI,pCount);
barHdlI.EdgeColor='none';
if size(bar1Color,1)==1
    bar1Color=[bar1Color;bar1Color];
end
tx=linspace(0,1,size(bar1Color,1))';
ty1=bar1Color(:,1);ty2=bar1Color(:,2);ty3=bar1Color(:,3);
tX=linspace(0,1,length(pType))';
bar1Color=[interp1(tx,ty1,tX,'pchip'),interp1(tx,ty2,tX,'pchip'),interp1(tx,ty3,tX,'pchip')];
barHdlI.FaceColor='flat';
for i=1:length(pType)
    barHdlI.CData(i,:)=bar1Color(i,:);
end
text(axI,1:length(pType),pCount,string(pCount),'HorizontalAlignment','center',...
    'VerticalAlignment','bottom','FontName','Times New Roman','FontSize',12,'Color',[61,58,61]./255)
% 集合统计图 ---------------------------------------------------------------
barHdlS=barh(axS,sCount,'BarWidth',.6);
barHdlS.EdgeColor='none';
barHdlS.BaseLine.Color='none';
for i=1:size(Data,2)
    annotation('textbox',[(axS.Position(1)+axS.Position(3)+axI.Position(1))/2-.02,...
        axS.Position(2)+axS.Position(4)./size(Data,2).*(i-.5)-.02,.04,.04],...
        'String',setName{sInd(i)},'HorizontalAlignment','center','VerticalAlignment','middle',...
        'FitBoxToText','on','LineStyle','none','FontName','Times New Roman','FontSize',13)
end
if size(bar2Color,1)==1
    bar2Color=[bar2Color;bar2Color];
end
tx=linspace(0,1,size(bar2Color,1))';
ty1=bar2Color(:,1);ty2=bar2Color(:,2);ty3=bar2Color(:,3);
tX=linspace(0,1,size(Data,2))';
bar2Color=[interp1(tx,ty1,tX,'pchip'),interp1(tx,ty2,tX,'pchip'),interp1(tx,ty3,tX,'pchip')];
barHdlS.FaceColor='flat';
sstr{size(Data,2)}='';
for i=1:size(Data,2)
    barHdlS.CData(i,:)=bar2Color(i,:);
    sstr{i}=[num2str(sCount(i)),' '];
end
text(axS,sCount,1:size(Data,2),sstr,'HorizontalAlignment','right',...
    'VerticalAlignment','middle','FontName','Times New Roman','FontSize',12,'Color',[61,58,61]./255)
% 绘制关系连线 ---------------------------------------------------------------
patchColor=[248,246,249;255,254,255]./255;
for i=1:size(Data,2)
    fill(axL,axI.XLim([1,2,2,1]),[-.5,-.5,.5,.5]+i,patchColor(mod(i+1,2)+1,:),'EdgeColor','none')
end
[tX,tY]=meshgrid(1:length(pType),1:size(Data,2));
plot(axL,tX(:),tY(:),'o','Color',[233,233,233]./255,...
    'MarkerFaceColor',[233,233,233]./255,'MarkerSize',10);
for i=1:length(pType)
    tY=find(pBool(pType(i),:));
    oY=zeros(size(tY));
    for j=1:length(tY)
        oY(j)=find(sType==tY(j));
    end
    tX=i.*ones(size(tY));
    plot(axL,tX(:),oY(:),'-o','Color',lineColor(1,:),'MarkerEdgeColor','none',...
        'MarkerFaceColor',lineColor(1,:),'MarkerSize',10,'LineWidth',2);
end

若是前面配色部分使用的是:

bar1Color=[61,58,61]./255;
bar2Color=[61,58,61]./255;
lineColor=[61,58,61]./255;

修改其中一个柱状图颜色,另一个用多行颜色矩阵:

bar1Color=[66,182,195]./255;
bar2Color=[253,255,228;
          164,218,183;
          68,181,197;
          44,126,185;
          35,51,154]./255;
lineColor=[61,58,61]./255;

一个用多行颜色矩阵,一个使用自带colormap数据:

bar1Color=[0,0,245;245,0,0]./255;
bar2Color=cool;
lineColor=[61,58,61]./255;

完整代码

% upSetMDemo
% @author : slandarer
% Zhaoxu Liu / slandarer (2023). upset plot 
% (https://www.mathworks.com/matlabcentral/fileexchange/123695-upset-plot), 
% MATLAB Central File Exchange. 检索来源 2023/1/22.

rng(2)
clc;clear;
setName={'RB1','PIK3R1','EGFR','TP53','PTEN'};
Data=rand([200,5])>.85;
% setName={'A','B','C','D','E','F','G'};
% Data=rand([200,7])>.9;

% 设置两个柱状图及关系连线的颜色
bar1Color=[61,58,61]./255;
bar2Color=[61,58,61]./255;
lineColor=[61,58,61]./255;

% bar1Color=[66,182,195]./255;
% bar2Color=[253,255,228;
%           164,218,183;
%           68,181,197;
%           44,126,185;
%           35,51,154]./255;
% lineColor=[61,58,61]./255;

bar1Color=[0,0,245;245,0,0]./255;
bar2Color=cool;
lineColor=[61,58,61]./255;

%% =========================================================================
% 进行组合统计(一顿花里胡哨的操作)
pBool=abs(dec2bin((1:(2^size(Data,2)-1))'))-48;
[pPos,~]=find(((pBool*(1-Data'))|((1-pBool)*Data'))==0);
sPPos=sort(pPos);dPPos=find([diff(sPPos);1]);
pType=sPPos(dPPos);pCount=diff([0;dPPos]);
[pCount,pInd]=sort(pCount,'descend');
pType=pType(pInd);
sCount=sum(Data,1);
[sCount,sInd]=sort(sCount,'descend');
sType=1:size(Data,2);
sType=sType(sInd);
%% ========================================================================
% 构造figure及axes
fig=figure('Units','normalized','Position',[.3,.2,.5,.63],'Color',[1,1,1]);
axI=axes('Parent',fig);hold on;
set(axI,'Position',[.33,.35,.655,.61],'LineWidth',1.2,'Box','off','TickDir','out',...
    'FontName','Times New Roman','FontSize',12,'XTick',[],'XLim',[0,length(pType)+1])
axI.YLabel.String='Intersection Size';
axI.YLabel.FontSize=16;
%
axS=axes('Parent',fig);hold on;
set(axS,'Position',[.01,.08,.245,.26],'LineWidth',1.2,'Box','off','TickDir','out',...
    'FontName','Times New Roman','FontSize',12,'YColor','none','YLim',[.5,size(Data,2)+.5],...
    'YAxisLocation','right','XDir','reverse','YTick',[])
axS.XLabel.String='Set Size';
axS.XLabel.FontSize=16;
%
axL=axes('Parent',fig);hold on;
set(axL,'Position',[.33,.08,.655,.26],'YColor','none','YLim',[.5,size(Data,2)+.5],'XColor','none','XLim',axI.XLim)
%% ========================================================================
% 相交关系统计图 -----------------------------------------------------------
barHdlI=bar(axI,pCount);
barHdlI.EdgeColor='none';
if size(bar1Color,1)==1
    bar1Color=[bar1Color;bar1Color];
end
tx=linspace(0,1,size(bar1Color,1))';
ty1=bar1Color(:,1);ty2=bar1Color(:,2);ty3=bar1Color(:,3);
tX=linspace(0,1,length(pType))';
bar1Color=[interp1(tx,ty1,tX,'pchip'),interp1(tx,ty2,tX,'pchip'),interp1(tx,ty3,tX,'pchip')];
barHdlI.FaceColor='flat';
for i=1:length(pType)
    barHdlI.CData(i,:)=bar1Color(i,:);
end
text(axI,1:length(pType),pCount,string(pCount),'HorizontalAlignment','center',...
    'VerticalAlignment','bottom','FontName','Times New Roman','FontSize',12,'Color',[61,58,61]./255)
% 集合统计图 ---------------------------------------------------------------
barHdlS=barh(axS,sCount,'BarWidth',.6);
barHdlS.EdgeColor='none';
barHdlS.BaseLine.Color='none';
for i=1:size(Data,2)
    annotation('textbox',[(axS.Position(1)+axS.Position(3)+axI.Position(1))/2-.02,...
        axS.Position(2)+axS.Position(4)./size(Data,2).*(i-.5)-.02,.04,.04],...
        'String',setName{sInd(i)},'HorizontalAlignment','center','VerticalAlignment','middle',...
        'FitBoxToText','on','LineStyle','none','FontName','Times New Roman','FontSize',13)
end
if size(bar2Color,1)==1
    bar2Color=[bar2Color;bar2Color];
end
tx=linspace(0,1,size(bar2Color,1))';
ty1=bar2Color(:,1);ty2=bar2Color(:,2);ty3=bar2Color(:,3);
tX=linspace(0,1,size(Data,2))';
bar2Color=[interp1(tx,ty1,tX,'pchip'),interp1(tx,ty2,tX,'pchip'),interp1(tx,ty3,tX,'pchip')];
barHdlS.FaceColor='flat';
sstr{size(Data,2)}='';
for i=1:size(Data,2)
    barHdlS.CData(i,:)=bar2Color(i,:);
    sstr{i}=[num2str(sCount(i)),' '];
end
text(axS,sCount,1:size(Data,2),sstr,'HorizontalAlignment','right',...
    'VerticalAlignment','middle','FontName','Times New Roman','FontSize',12,'Color',[61,58,61]./255)
% 绘制关系连线 ---------------------------------------------------------------
patchColor=[248,246,249;255,254,255]./255;
for i=1:size(Data,2)
    fill(axL,axI.XLim([1,2,2,1]),[-.5,-.5,.5,.5]+i,patchColor(mod(i+1,2)+1,:),'EdgeColor','none')
end
[tX,tY]=meshgrid(1:length(pType),1:size(Data,2));
plot(axL,tX(:),tY(:),'o','Color',[233,233,233]./255,...
    'MarkerFaceColor',[233,233,233]./255,'MarkerSize',10);
for i=1:length(pType)
    tY=find(pBool(pType(i),:));
    oY=zeros(size(tY));
    for j=1:length(tY)
        oY(j)=find(sType==tY(j));
    end
    tX=i.*ones(size(tY));
    plot(axL,tX(:),oY(:),'-o','Color',lineColor(1,:),'MarkerEdgeColor','none',...
        'MarkerFaceColor',lineColor(1,:),'MarkerSize',10,'LineWidth',2);
end
% Zhaoxu Liu / slandarer (2023). upset plot 
% (Https://www.mathworks.com/matlabcentral/fileexchange/123695-upset-plot), 
% MATLAB Central File Exchange. 检索来源 2023/1/22.

对于本例子的解读:

以上就是Matlab实现绘制高阶版本韦恩图(upset图)的详细内容,更多关于Matlab绘制韦恩图的资料请关注编程网其它相关文章!

--结束END--

本文标题: Matlab实现绘制高阶版本韦恩图(upset图)

本文链接: https://lsjlt.com/news/178516.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • Matlab实现绘制高阶版本韦恩图(upset图)
    目录教程部分数据准备配色主要运算创建布局并修饰图像绘制完整代码韦恩图随着阶数升高会越来越复杂,当阶数达到7或者以上时几乎没办法绘制: 但是使用upset图却可以比较轻易的绘制: ...
    99+
    2023-01-28
    Matlab绘制韦恩图 Matlab 韦恩图
  • Matlab实现绘制雷达图(蜘蛛图)
    目录绘制效果教程部分基础绘制改变样式添加修改标签添加图例R轴位置及其范围修改轴属性修改标签属性修改圆形背景修饰多边形工具函数完整代码绘制效果 教程部分 基础绘制 数据为数值矩阵即...
    99+
    2024-04-02
  • 基于Matlab实现山脊图的绘制
    目录纯色山脊图模板渐变色山脊图模板写了一个用于绘制山脊图的模板,仅需要往需要填写数据的区域填入数据点击运行即可,以下提供两款模板,第一款为纯色模板而第二款为渐变色模板: 纯色山脊图模...
    99+
    2024-04-02
  • Python&Matlab实现伏羲八卦图的绘制
    目录1 与达尔文对话2 与老子对话2.1 Python实现2.2 Matlab实现 1 与达尔文对话 140年前,1858年7月1日,达尔文在英伦岛发表了自己有关自然选择的...
    99+
    2024-04-02
  • 详解Matlab实现动态表白图的绘制
    目录1.幸福和快乐的哲学追问2.提前祝女朋友节日快乐2.1 展现2.2 代码1.幸福和快乐的哲学追问 在过去的500年间,我们见证了一连串令人惊叹的革命。地球在生态和历史上都已经整合...
    99+
    2024-04-02
  • Matlab怎么实现动态表白图的绘制
    这篇文章主要介绍了Matlab怎么实现动态表白图的绘制的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Matlab怎么实现动态表白图的绘制文章都会有所收获,下面我们一起来看看吧。提前祝女朋友节日快乐1 展现这里没...
    99+
    2023-06-30
  • Matlab实现绘制有气泡感的网络图
    目录教程部分0 数据准备1 基础绘图2 气泡大小3 气泡颜色4 气泡其他属性5 连线配色6 添加节点及类标签7 标签距离8 设置字体工具函数完整代码今天给大家带来一款用来绘制有气泡感...
    99+
    2023-02-22
    Matlab绘制网络图 Matlab 网络图
  • 利用Matlab实现阴影柱状图的绘制
    目录示例图使用教程1.基本使用2.添加图例3.阴影格式4.特殊结构5.额外修饰工具函数完整代码封面图绘制代码阴影柱状图绘制的代码MATHWORKS上也有,不过是生成图片后,识别图像上...
    99+
    2024-04-02
  • Python OpenCV实现基本图形绘制
    1.导入模块 import cv2 as cv import numpy as np 2.OpenCV绘图大致步骤 OpenCV 图形绘制步骤 (1)先定义基础画布canv...
    99+
    2024-04-02
  • C++调用matlab引擎实现三维图的绘制
    目录VS2012设置matlab程序VS2012控制台程序运行结果说明VS2012设置 项目–项目属性–配置属性–VC++目录–包含目...
    99+
    2022-12-27
    C++ matlab绘制三维图 C++ 绘制三维图 matlab 三维图
  • Matlab实现极坐标堆叠柱状图的绘制
    目录part1: 函数介绍基本使用角度范围常用函数:改变样式常用函数:设置下界常用函数:修改颜色添加图例part2: 完整类函数代码part3: 两个使用示例示例一示例二极坐标堆叠图...
    99+
    2022-11-13
    Matlab堆叠柱状图 Matlab 柱状图
  • 基于Matlab实现离散系统分岔图的绘制
    目录1.一维离散分岔图2.二维离散分岔图3.封面图绘制1.一维离散分岔图 一维那非常简单哈,就循环着画呗,以下举两个简单的例子 : % x(n+1)=1-r*x(n)^2 % ...
    99+
    2024-04-02
  • Matlab如何实现绘制有气泡感的网络图
    这篇文章主要介绍“Matlab如何实现绘制有气泡感的网络图”,在日常操作中,相信很多人在Matlab如何实现绘制有气泡感的网络图问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Matlab如何实现绘制有气泡感的...
    99+
    2023-07-05
  • Python+matplotlib怎么实现绘制等高线图
    本篇内容主要讲解“Python+matplotlib怎么实现绘制等高线图”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Python+matplotlib怎么实现绘制等高线图”吧!1. 等高线图概...
    99+
    2023-06-21
  • Matlab实现四种HSV色轮图绘制的示例代码
    前言 有粉丝问我图(d)上的色盘图咋画: 明度(V)渐变版 注意,此处是为了还原论文中图片所以X加了。 % 生成网格 tList=linspace(0,2.*pi,300...
    99+
    2024-04-02
  • Vue+Echarts实现基本K线图的绘制
    目录1 引入Echarts1.1 安装1.2 引入1.3 基本使用2 基础K线图2.1 基础k线图2.2 基础日k图3 总结1 引入Echarts 1.1 安装 使用如下命令通过 n...
    99+
    2023-03-15
    Vue Echarts绘制K线图 Vue Echarts K线图 Vue K线图 Vue Echarts
  • WPF+WriteableBitmap实现高性能曲线图的绘制
    目录一、前言二、正文三、运行效果一、前言 之前分享过一期关于DrawingVisual来绘制高性能曲线的博客,今天再分享一篇通过另一种方式来绘制高性能曲线的方法,也就是通过Write...
    99+
    2022-11-13
    WPF WriteableBitmap绘制曲线图 WPF WriteableBitmap 曲线图 WPF WriteableBitmap
  • Python实现绘制Matlab格式的地图边框的示例代码
    目录1、Python绘制色斑图2、Python绘制比例尺、指南针3、Python绘制Matlab格式的地图边框1、Python绘制色斑图 import matplotlib.pyp...
    99+
    2024-04-02
  • Matlab实现二维散点主方向直方图的绘制详解
    目录工具函数基本使用多组数据修改配色精细修饰简简单单画个二维散点图主方向上的直方图: 工具函数 输入nx2大小的数组,返回以下四个图形对象: H1: ‘数据点&rsqu...
    99+
    2024-04-02
  • Python+matplotlib实现绘制等高线图示例详解
    目录前言1. 等高线图概述什么是等高线图?等高线图常用场景绘制等高线图步骤案例展示2. 等高线图属性设置等高线颜色设置等高线透明度设置等高线颜色级别设置等高线宽度设置等高线样式3. ...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作