基于Matlab實(shí)現(xiàn)山脊圖的繪制
寫了一個(gè)用于繪制山脊圖的模板,僅需要往需要填寫數(shù)據(jù)的區(qū)域填入數(shù)據(jù)點(diǎn)擊運(yùn)行即可,以下提供兩款模板,第一款為純色模板而第二款為漸變色模板:
純色山脊圖模板
模板代碼:
function ridgeMapTMPL1 % @author: slandarer % 在這里放入你的數(shù)據(jù)======================================================= 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)]; % 把數(shù)據(jù)放到元胞數(shù)組,要是數(shù)據(jù)太多可寫循環(huán)放入 dataCell={X1,X2,X3,X4,X5}; % 各個(gè)數(shù)據(jù)類的名稱,可空著 dataName={'A','B','C','D','E'}; % 各個(gè)山脊的顏色,可空著也可只放一個(gè)顏色 colorList=[]; % 非必要屬性 % ------------------------------------------------------------------------- legendOn=false; % 是否繪制圖例 true/false xTickOn=true; % 開(kāi)啟X軸 sep=1/6; % 設(shè)置山脊距離,可空著 xLim=[]; % 設(shè)置X軸范圍距離,可空著 axColor=[]; % 設(shè)置背景顏色,可空著 fontName=''; % 設(shè)置X,Y軸標(biāo)簽字體,可空著 fontSize=14; % 設(shè)置X,Y軸標(biāo)簽字號(hào),可空著 faceAlpha=1; % 面透明度 edgeColor=[1,1,1].*.3; % 邊緣顏色 % ========================================================================= % 設(shè)置顏色 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 % 設(shè)置間隙距離 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); % 額外的屬性設(shè)置=========================================================== % ax.(...)=... % ========================================================================= end
繪制效果:
更該部分配置后的繪制效果:
將每個(gè)山脊賦予不同顏色,刪除X軸并添加圖例
% 在這里放入你的數(shù)據(jù)======================================================= 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)]; % 把數(shù)據(jù)放到元胞數(shù)組,要是數(shù)據(jù)太多可寫循環(huán)放入 dataCell={X1,X2,X3,X4,X5}; % 各個(gè)數(shù)據(jù)類的名稱,可空著 dataName={'A','B','C','D','E'}; % 各個(gè)山脊的顏色,可空著也可只放一個(gè)顏色 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; % 開(kāi)啟X軸 sep=1/6; % 設(shè)置山脊距離,可空著 xLim=[]; % 設(shè)置X軸范圍距離,可空著 axColor=[]; % 設(shè)置背景顏色,可空著 fontName=[]; % 設(shè)置X,Y軸標(biāo)簽字體,可空著 fontSize=14; % 設(shè)置X,Y軸標(biāo)簽字號(hào),可空著 faceAlpha=1; % 面透明度 edgeColor=[1,1,1].*.3; % 邊緣顏色 % ===============================================================
漸變色山脊圖模板
模板代碼:
function ridgeMapTMPL2 % @author: slandarer % 在這里放入你的數(shù)據(jù)======================================================= 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)]; % 把數(shù)據(jù)放到元胞數(shù)組,要是數(shù)據(jù)太多可寫循環(huán)放入 dataCell={X1,X2,X3,X4,X5}; % 各個(gè)數(shù)據(jù)類的名稱,可空著 dataName={'A','B','C','D','E'}; % 山脊的漸變顏色,可空著也放數(shù)組也可放顏色名稱 cmap=[]; % cmap=PYCM().plasma(); % cmap='colorcube' % 非必要屬性 % ------------------------------------------------------------------------- xTickOn=true; % 開(kāi)啟X軸 sep=1/6; % 設(shè)置山脊距離,可空著 xLim=[]; % 設(shè)置X軸范圍距離,可空著 fontName=''; % 設(shè)置X,Y軸標(biāo)簽字體,可空著 fontSize=14; % 設(shè)置X,Y軸標(biāo)簽字號(hào),可空著 % ========================================================================= classNum=length(dataCell); % 設(shè)置間隙距離 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); % 額外的屬性設(shè)置=========================================================== % ax.(...)=... % ========================================================================= end
繪制效果:
使用MATLAB自帶顏色:
例:將cmap=[]改為:
cmap='summer'
cmap='colorcube'
使用PYCM函數(shù):
例:將cmap=[]改為:
cmap=PYCM().plasma()
到此這篇關(guān)于基于Matlab實(shí)現(xiàn)山脊圖的繪制的文章就介紹到這了,更多相關(guān)Matlab山脊圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼
這篇文章主要介紹了C++ 中重載和運(yùn)算符重載加號(hào)實(shí)現(xiàn)矩陣相加實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2017-03-03C語(yǔ)言實(shí)現(xiàn)簡(jiǎn)單的三子棋游戲
這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)三子棋游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-09-09C語(yǔ)言鏈表案例學(xué)習(xí)之通訊錄的實(shí)現(xiàn)
為了將所學(xué)到的鏈表的知識(shí)進(jìn)行鞏固學(xué)習(xí),做到學(xué)以致用,本文將利用鏈表制作一個(gè)簡(jiǎn)單的通訊錄。文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下2022-10-10Qt開(kāi)發(fā)實(shí)現(xiàn)跨窗口信號(hào)槽通信
這篇文章主要為大家詳細(xì)介紹了Qt開(kāi)發(fā)實(shí)現(xiàn)跨窗口信號(hào)槽通信,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-01-01C++中new/delete與malloc/free的區(qū)別小結(jié)
本文主要介紹了C++中new/delete與malloc/free的區(qū)別小結(jié), malloc、free是C中的庫(kù)函數(shù) new、delete 是C++當(dāng)中的操作符,讀者可以更好地理解C++中內(nèi)存管理的方式和優(yōu)勢(shì)2023-08-08在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別
這篇文章主要介紹了在C語(yǔ)言里單引號(hào)和雙引號(hào)的區(qū)別,本文通過(guò)代碼的實(shí)例和注釋的詳細(xì)的說(shuō)明了單引號(hào)和雙引號(hào)的概念與區(qū)別,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07C數(shù)據(jù)結(jié)構(gòu)之雙鏈表詳細(xì)示例分析
以下是對(duì)c語(yǔ)言中的雙鏈表進(jìn)行了詳細(xì)的分析介紹,需要的朋友可以過(guò)來(lái)參考下2013-08-08