Matlab實(shí)現(xiàn)二維散點(diǎn)主方向直方圖的繪制詳解
簡(jiǎn)簡(jiǎn)單單畫(huà)個(gè)二維散點(diǎn)圖主方向上的直方圖:
工具函數(shù)
輸入nx2
大小的數(shù)組,返回以下四個(gè)圖形對(duì)象:
- H1: ‘數(shù)據(jù)點(diǎn)’
- H2: ‘主方向’
- H3: ‘數(shù)據(jù)范圍’
- H4: ‘統(tǒng)計(jì)圖’
function [H1,H2,H3,H4]=PCA2Hist(X,varargin) % H1: '數(shù)據(jù)點(diǎn)' % H2: '主方向' % H3: '數(shù)據(jù)范圍' % H4: '統(tǒng)計(jì)圖' % PCA-Hist % rng(12) hold on H1=scatter(X(:,1),X(:,2),'x','LineWidth',2,varargin{:}); % 求主方向 Xmean=mean(X); X0=X-Xmean; covMat=(X0.')*X0./size(X,1); [V,~]=eigs(covMat,1); V=V.*sign(V(1)); Vc=[V(2);-V(1)]; Lp=max(X0*V); Ln=min(X0*V); Ll=max(X0*Vc); Lr=min(X0*Vc); % 繪制統(tǒng)計(jì)圖 H2=plot(Xmean(1)+[Lp,Ln].*V(1).*1.05,Xmean(2)+[Lp,Ln].*V(2).*1.05,'Color',[H1.CData./5,.8],'LineStyle','-.','LineWidth',1.5); H3=fill(Xmean(1)+[Lp,Lp,Ln,Ln].*V(1).*1.05+[Ll,Lr,Lr,Ll].*Vc(1).*1.05,... Xmean(2)+[Lp,Lp,Ln,Ln].*V(2).*1.05+[Ll,Lr,Lr,Ll].*Vc(2).*1.05,... H1.CData,'FaceAlpha',.15,'EdgeColor','none'); histHdl=histogram(X0*Vc,'BinEdges',linspace(Lr,Ll,13),'Visible','off'); maxValue=max(histHdl.Values); for i=1:histHdl.NumBins H4(i)=fill(Xmean(1)+[histHdl.BinEdges(i).*Vc(1)+Lp.*V(1).*1.05,... histHdl.BinEdges(i).*Vc(1)+Lp.*V(1).*1.05+histHdl.Values(i).*Lp.*V(1).*0.5./maxValue,... histHdl.BinEdges(i+1).*Vc(1)+Lp.*V(1).*1.05+histHdl.Values(i).*Lp.*V(1).*0.5./maxValue,... histHdl.BinEdges(i+1).*Vc(1)+Lp.*V(1).*1.05],... Xmean(2)+[histHdl.BinEdges(i).*Vc(2)+Lp.*V(2).*1.05,... histHdl.BinEdges(i).*Vc(2)+Lp.*V(2).*1.05+histHdl.Values(i).*Lp.*V(2).*0.5./maxValue,... histHdl.BinEdges(i+1).*Vc(2)+Lp.*V(2).*1.05+histHdl.Values(i).*Lp.*V(2).*0.5./maxValue,... histHdl.BinEdges(i+1).*Vc(2)+Lp.*V(2).*1.05],... H1.CData,'FaceAlpha',.5); end end
基本使用
% 隨機(jī)生成數(shù)據(jù) X=mvnrnd([0,0],[3,1.5;1.5,2],500); % 繪圖 [H1,H2,H3,H4]=PCA2Hist(X); % 創(chuàng)建圖例 lgd=legend([H1,H2,H3,H4(1)],'數(shù)據(jù)點(diǎn)','主方向','數(shù)據(jù)范圍','統(tǒng)計(jì)圖'); lgd.Location='best'; % 坐標(biāo)區(qū)域修飾 ax=gca;hold on; ax.DataAspectRatio=[1,1,1]; ax.XGrid='on'; ax.YGrid='on'; ax.XColor=[.2,.2,.2]; ax.YColor=[.2,.2,.2]; ax.GridLineStyle='-.'; ax.GridAlpha=.1; ax.LineWidth=1.1; ax.FontSize=11;
多組數(shù)據(jù)
% 隨機(jī)生成數(shù)據(jù) X1=mvnrnd([0,0],[3,1.5;1.5,2],500); X2=mvnrnd([0,0],[3,.1;.1,2],500)-[0,5]; % 繪圖 [H1_1,H1_2,H1_3,H1_4]=PCA2Hist(X1); [H2_1,H2_2,H2_3,H2_4]=PCA2Hist(X2); % 創(chuàng)建圖例 lgd=legend([H1_1,H1_2,H1_3,H1_4(1),H2_1,H2_2,H2_3,H2_4(1)],... '數(shù)據(jù)點(diǎn)','主方向','數(shù)據(jù)范圍','統(tǒng)計(jì)圖','數(shù)據(jù)點(diǎn)','主方向','數(shù)據(jù)范圍','統(tǒng)計(jì)圖'); lgd.Location='best'; % 坐標(biāo)區(qū)域修飾 ax=gca;hold on; ax.DataAspectRatio=[1,1,1]; ax.XGrid='on'; ax.YGrid='on'; ax.XColor=[.2,.2,.2]; ax.YColor=[.2,.2,.2]; ax.GridLineStyle='-.'; ax.GridAlpha=.1; ax.LineWidth=1.1; ax.FontSize=11;
修改配色
設(shè)置CData
屬性即可:
% 隨機(jī)生成數(shù)據(jù) X1=mvnrnd([0,0],[3,1.5;1.5,2],500); X2=mvnrnd([0,0],[3,.1;.1,2],500)-[0,5]; % 繪圖 [H1_1,H1_2,H1_3,H1_4]=PCA2Hist(X1,'CData',[122,138,114]./255); [H2_1,H2_2,H2_3,H2_4]=PCA2Hist(X2,'CData',[137,150,165]./255); % 創(chuàng)建圖例 lgd=legend([H1_1,H1_2,H1_3,H1_4(1),H2_1,H2_2,H2_3,H2_4(1)],... '數(shù)據(jù)點(diǎn)','主方向','數(shù)據(jù)范圍','統(tǒng)計(jì)圖','數(shù)據(jù)點(diǎn)','主方向','數(shù)據(jù)范圍','統(tǒng)計(jì)圖'); lgd.Location='best'; % 坐標(biāo)區(qū)域修飾 ax=gca;hold on; ax.DataAspectRatio=[1,1,1]; ax.XGrid='on'; ax.YGrid='on'; ax.XColor=[.2,.2,.2]; ax.YColor=[.2,.2,.2]; ax.GridLineStyle='-.'; ax.GridAlpha=.1; ax.LineWidth=1.1; ax.FontSize=11;
精細(xì)修飾
對(duì)返回的四個(gè)對(duì)象進(jìn)行屬性設(shè)置即可,比如把方向線改為紅色,將散點(diǎn)改為圓點(diǎn):
% 隨機(jī)生成數(shù)據(jù) X=mvnrnd([0,0],[3,1.5;1.5,2],500); % 繪圖 [H1,H2,H3,H4]=PCA2Hist(X); % 圖形對(duì)象修飾 H1.Marker='o'; H1.MarkerFaceColor=H1.CData; H1.MarkerEdgeColor=[1,1,1]; H1.SizeData=80; H1.LineWidth=.8; H2.Color=[.8,0,0]; % 創(chuàng)建圖例 lgd=legend([H1,H2,H3,H4(1)],'數(shù)據(jù)點(diǎn)','主方向','數(shù)據(jù)范圍','統(tǒng)計(jì)圖'); lgd.Location='best'; % 坐標(biāo)區(qū)域修飾 ax=gca;hold on; ax.DataAspectRatio=[1,1,1]; ax.XGrid='on'; ax.YGrid='on'; ax.XColor=[.2,.2,.2]; ax.YColor=[.2,.2,.2]; ax.GridLineStyle='-.'; ax.GridAlpha=.1; ax.LineWidth=1.1; ax.FontSize=11;
到此這篇關(guān)于Matlab實(shí)現(xiàn)二維散點(diǎn)主方向直方圖的繪制詳解的文章就介紹到這了,更多相關(guān)Matlab直方圖內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Qt編寫(xiě)地圖實(shí)現(xiàn)海量點(diǎn)位標(biāo)注
海量點(diǎn)位標(biāo)注的出現(xiàn),是為了解決普通設(shè)備點(diǎn)超過(guò)幾百個(gè)性能極速降低的問(wèn)題。本文將介紹如何通過(guò)Qt實(shí)現(xiàn)海量點(diǎn)位標(biāo)注功能,感興趣的可以了解一下2022-01-01C++中引用傳遞與指針傳遞的區(qū)別(面試常見(jiàn))
這篇文章主要介紹了C++中引用傳遞與指針傳遞的區(qū)別(面試常見(jiàn)),需要的朋友可以參考下2018-03-03OpenCV實(shí)現(xiàn)直線檢測(cè)并消除
這篇文章主要為大家詳細(xì)介紹了OpenCV實(shí)現(xiàn)直線檢測(cè)并消除,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-06-06C++實(shí)現(xiàn)將數(shù)組中的值反轉(zhuǎn)
這里給大家分享的事一則C++實(shí)現(xiàn)將數(shù)組中的值反轉(zhuǎn)的代碼,取材自《C++程序設(shè)計(jì)》(梁勇著第三版367頁(yè)),有需要的小伙伴可以參考下2016-05-05c++?對(duì)象分配在棧上還是在堆上問(wèn)題分析
這篇文章主要為大家介紹了c++?對(duì)象在棧上還是在堆上問(wèn)題分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-11-11C語(yǔ)言嵌入informix基礎(chǔ)入門(mén)示例講解
這篇文章主要介紹了C語(yǔ)言嵌入informix基礎(chǔ)方法,大家參考使用2013-11-11C語(yǔ)言經(jīng)典例程100例(經(jīng)典c程序100例)
這篇文章主要介紹了C語(yǔ)言經(jīng)典例程100例,經(jīng)典c程序100例,學(xué)習(xí)c語(yǔ)言的朋友可以參考一下2018-03-03