欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Matlab實現(xiàn)繪制高階版本韋恩圖(upset圖)

 更新時間:2023年01月28日 11:40:41   作者:slandarer  
韋恩圖隨著階數(shù)升高會越來越復(fù)雜,當(dāng)階數(shù)達(dá)到7或者以上時幾乎沒辦法繪制,但是使用upset圖卻可以比較輕易的繪制。本文就來用Matlab實現(xiàn)繪制upset圖,需要的可以參考一下

韋恩圖隨著階數(shù)升高會越來越復(fù)雜,當(dāng)階數(shù)達(dá)到7或者以上時幾乎沒辦法繪制:

但是使用upset圖卻可以比較輕易的繪制:

兩種類型圖的對應(yīng)關(guān)系:

這期便教大家如何繪制這樣的upset圖:

教程部分

數(shù)據(jù)準(zhǔn)備

數(shù)據(jù)需要的是0,1矩陣,例如隨機(jī)生成數(shù)據(jù):

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

每一行代表一個對象,第一行是1,0,0,1,0說明它既屬于第一類也屬于第四類。

配色

配色可以是rgb數(shù)值,也可以是多行顏色,也可以用matlab自帶的colormap數(shù)據(jù):

% 設(shè)置兩個柱狀圖及關(guān)系連線的顏色
bar1Color=[61,58,61]./255;
bar2Color=[61,58,61]./255;
lineColor=[61,58,61]./255;

在隨后的部分會更詳細(xì)的講解顏色設(shè)置。

主要運算

接下來幾行就是數(shù)據(jù)統(tǒng)計的詳細(xì)代碼,小技巧有點多,這部分技巧在韋恩圖繪制那篇和數(shù)據(jù)統(tǒng)計那篇也寫到過,可以去瞅瞅,這里不詳細(xì)展開:

% 進(jìn)行組合統(tǒng)計(一頓花里胡哨的操作)
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);

創(chuàng)建布局并修飾

若集合名稱為中文亂碼,請將字體改為宋體,若后面繪圖部分顯示不全請調(diào)整各個axes的XLim及YLim屬性。

% 構(gòu)造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)

圖像繪制

% 相交關(guān)系統(tǒng)計圖 -----------------------------------------------------------
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)
% 集合統(tǒng)計圖 ---------------------------------------------------------------
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)
% 繪制關(guān)系連線 ---------------------------------------------------------------
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數(shù)據(jù):

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;

% 設(shè)置兩個柱狀圖及關(guān)系連線的顏色
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;

%% =========================================================================
% 進(jìn)行組合統(tǒng)計(一頓花里胡哨的操作)
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);
%% ========================================================================
% 構(gòu)造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)
%% ========================================================================
% 相交關(guān)系統(tǒng)計圖 -----------------------------------------------------------
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)
% 集合統(tǒng)計圖 ---------------------------------------------------------------
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)
% 繪制關(guān)系連線 ---------------------------------------------------------------
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實現(xiàn)繪制高階版本韋恩圖(upset圖)的詳細(xì)內(nèi)容,更多關(guān)于Matlab繪制韋恩圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++版本基于ros將文件夾中的圖像轉(zhuǎn)換為bag包

    C++版本基于ros將文件夾中的圖像轉(zhuǎn)換為bag包

    這篇文章主要介紹了C++版本基于ros將文件夾中的圖像轉(zhuǎn)換為bag包,本文通過圖文并茂的形式給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-01-01
  • C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

    C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與)

    這篇文章主要介紹了C++實現(xiàn)LeetCode(201.數(shù)字范圍位相與),本篇文章通過簡要的案例,講解了該項技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-08-08
  • C語言實現(xiàn)簡單的貪吃蛇游戲的示例代碼

    C語言實現(xiàn)簡單的貪吃蛇游戲的示例代碼

    這篇文章主要為大家詳細(xì)介紹了C語言如何實現(xiàn)經(jīng)典貪吃蛇游戲,文中的示例代碼講解詳細(xì),對我們學(xué)習(xí)C語言有一定的幫助,感興趣的小伙伴可以跟隨小編一起了解一下
    2023-01-01
  • 雙緩沖解決VC++繪圖時屏幕閃爍

    雙緩沖解決VC++繪圖時屏幕閃爍

    相信很多人在做圖形界面開發(fā)時,常常會遇到屏幕閃爍的情況,當(dāng)然我也不例外,下面我們就來詳細(xì)探討下這個問題的解決辦法
    2015-08-08
  • C語言 掃雷程序的實現(xiàn)

    C語言 掃雷程序的實現(xiàn)

    這篇文章主要介紹了C語言 掃雷程序的實現(xiàn)的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • C語言編程中對目錄進(jìn)行基本的打開關(guān)閉和讀取操作詳解

    C語言編程中對目錄進(jìn)行基本的打開關(guān)閉和讀取操作詳解

    這篇文章主要介紹了C語言編程中對目錄進(jìn)行基本的打開關(guān)閉和讀取操作,是C語言入門學(xué)習(xí)中的基礎(chǔ)知識,需要的朋友可以參考下
    2015-09-09
  • C語言超詳細(xì)講解線性表

    C語言超詳細(xì)講解線性表

    線性表,數(shù)據(jù)結(jié)構(gòu)中最簡單的一種存儲結(jié)構(gòu),專門用于存儲邏輯關(guān)系為"一對一"的數(shù)據(jù)。線性表是基于數(shù)據(jù)在實際物理空間中的存儲狀態(tài),又可細(xì)分為順序表(順序存儲結(jié)構(gòu))和鏈表
    2022-07-07
  • 超詳細(xì)講解C++的三種函數(shù)傳遞方式

    超詳細(xì)講解C++的三種函數(shù)傳遞方式

    這個文章我將把我學(xué)習(xí)的有關(guān)函數(shù)傳遞形式的知識做個總結(jié),相信很多剛?cè)腴T的同學(xué)看到許多文章五花八門的形參會感到頭疼,但本質(zhì)上無非就是我要說的三種傳遞形式,快來跟我一起學(xué)習(xí)吧
    2022-05-05
  • C語言實現(xiàn)三子棋小游戲詳解

    C語言實現(xiàn)三子棋小游戲詳解

    這篇文章主要為大家詳細(xì)介紹了C語言實現(xiàn)三子棋小游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-11-11
  • C++中函數(shù)模板的用法詳細(xì)解析

    C++中函數(shù)模板的用法詳細(xì)解析

    所謂函數(shù)模板實際上是建立一個通用函數(shù),其涵涵素類型額形參類型不具體指定,用一個虛擬的類型來代表,這個通用函數(shù)就稱為函數(shù)模板
    2013-10-10

最新評論