最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Matlab繪制散點(diǎn)密度圖的教程詳解

 更新時(shí)間:2022年02月26日 17:17:03   作者:slandarer  
這篇文章主要介紹了如何使用MATLAB繪制散點(diǎn)密度圖(二維核密度),文中的示例代碼講解詳細(xì),對(duì)我們學(xué)習(xí)Matlab有一定幫助,需要的可以參考一下

效果

原理也很簡(jiǎn)單,通過matlab自帶的ksdensity獲得網(wǎng)格每一點(diǎn)密度,通過密度擬合曲面,再計(jì)算每個(gè)數(shù)據(jù)點(diǎn)對(duì)應(yīng)的概率,并將概率映射到顏色即可
為了怕大家找不到函數(shù)這次工具函數(shù)放到最前面

1工具函數(shù)完整代碼

function [CData,h,XMesh,YMesh,ZMesh,colorList]=density2C(X,Y,XList,YList,colorList)
[XMesh,YMesh]=meshgrid(XList,YList);
XYi=[XMesh(:) YMesh(:)];
F=ksdensity([X,Y],XYi);
ZMesh=zeros(size(XMesh));
ZMesh(1:length(F))=F;

h=interp2(XMesh,YMesh,ZMesh,X,Y);
if nargin<5
colorList=[0.2700         0    0.3300
    0.2700    0.2300    0.5100
    0.1900    0.4100    0.5600
    0.1200    0.5600    0.5500
    0.2100    0.7200    0.4700
    0.5600    0.8400    0.2700
    0.9900    0.9100    0.1300];
end
colorFunc=colorFuncFactory(colorList);
CData=colorFunc((h-min(h))./(max(h)-min(h)));
colorList=colorFunc(linspace(0,1,100)');

function colorFunc=colorFuncFactory(colorList)
x=(0:size(colorList,1)-1)./(size(colorList,1)-1);
y1=colorList(:,1);y2=colorList(:,2);y3=colorList(:,3);
colorFunc=@(X)[interp1(x,y1,X,'pchip'),interp1(x,y2,X,'pchip'),interp1(x,y3,X,'pchip')];
end
end

2參數(shù)說明

輸入:

  • X,Y 散點(diǎn)坐標(biāo)
  • XList,YList 用來構(gòu)造密度曲面網(wǎng)格的序列,其實(shí)就是把XLim,YLim分成小份,例如XList=0:0.1:10
  • colorList 顏色表mx3數(shù)組,用來構(gòu)造將高度映射到顏色函數(shù)的數(shù)據(jù)表

輸出:

  • CData各個(gè)點(diǎn)對(duì)應(yīng)顏色
  • h 各個(gè)點(diǎn)對(duì)應(yīng)核密度
  • XMesh,YMesh,ZMesh 核密度曲面數(shù)據(jù)
  • colorList 插值后更細(xì)密的顏色表

3使用方式

假如編寫了如下程序:

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];
scatter(PntSet(:,1),PntSet(:,2),'filled');

結(jié)果:

3.1散點(diǎn)賦色

將上面那段代碼改寫

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];

CData=density2C(PntSet(:,1),PntSet(:,2),-2:0.1:15,-2:0.1:15);
scatter(PntSet(:,1),PntSet(:,2),'filled','CData',CData);

3.2等高線圖

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];


[~,~,XMesh,YMesh,ZMesh,colorList]=density2C(PntSet(:,1),PntSet(:,2),-2:0.1:12,-2:0.1:12);
colormap(colorList)
contourf(XMesh,YMesh,ZMesh,10)

3.3帶直方圖的散點(diǎn)圖

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];

colorList=[0.9400    0.9700    0.9600
    0.8900    0.9300    0.9200
    0.8200    0.9100    0.8800
    0.6900    0.8500    0.7700
    0.5900    0.7800    0.6900
    0.5500    0.7500    0.6500
    0.4500    0.6500    0.5600
    0.4000    0.5800    0.4900
    0.3500    0.5100    0.4200
    0.2500    0.3600    0.3100
    0.1300    0.1700    0.1400];
CData=density2C(PntSet(:,1),PntSet(:,2),-2:0.1:15,-2:0.1:15,colorList);

set(gcf,'Color',[1 1 1]);

% 主分布圖
ax1=axes('Parent',gcf);hold(ax1,'on')
scatter(ax1,PntSet(:,1),PntSet(:,2),'filled','CData',CData);
ax1.Position=[0.1,0.1,0.6,0.6];

% X軸直方圖
ax2=axes('Parent',gcf);hold(ax2,'on')
histogram(ax2,PntSet(:,1),'FaceColor',[0.78 0.88 0.82],...
    'EdgeColor','none','FaceAlpha',0.7)
ax2.Position=[0.1,0.75,0.6,0.15];
ax2.YColor='none';
ax2.XTickLabel='';
ax2.TickDir='out';
ax2.XLim=ax1.XLim;

% Y軸直方圖
ax3=axes('Parent',gcf);hold(ax3,'on')
histogram(ax3,PntSet(:,2),'FaceColor',[0.78 0.88 0.82],...
    'EdgeColor','none','FaceAlpha',0.7,'Orientation','horizontal')
ax3.Position=[0.75,0.1,0.15,0.6];
ax3.XColor='none';
ax3.YTickLabel='';
ax3.TickDir='out';
ax3.YLim=ax1.YLim;

3.4帶直方圖的等高線圖

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];
colorList=[0.9300    0.9500    0.9700
    0.7900    0.8400    0.9100
    0.6500    0.7300    0.8500
    0.5100    0.6200    0.7900
    0.3700    0.5100    0.7300
    0.2700    0.4100    0.6300
    0.2100    0.3200    0.4900
    0.1500    0.2200    0.3500
    0.0900    0.1300    0.2100
    0.0300    0.0400    0.0700];
[~,~,XMesh,YMesh,ZMesh,colorList]=density2C(PntSet(:,1),PntSet(:,2),-2:0.1:13,-2:0.1:13,colorList);


set(gcf,'Color',[1 1 1]);
% 主分布圖
ax1=axes('Parent',gcf);hold(ax1,'on')
colormap(colorList)
contourf(XMesh,YMesh,ZMesh,10,'EdgeColor','none')
ax1.Position=[0.1,0.1,0.6,0.6];
ax1.TickDir='out';

% X軸直方圖
ax2=axes('Parent',gcf);hold(ax2,'on')
[f,xi]=ksdensity(PntSet(:,1));
fill([xi,xi(1)],[f,0],[0.34 0.47 0.71],'FaceAlpha',...
    0.3,'EdgeColor',[0.34 0.47 0.71],'LineWidth',1.2)
ax2.Position=[0.1,0.75,0.6,0.15];
ax2.YColor='none';
ax2.XTickLabel='';
ax2.TickDir='out';
ax2.XLim=ax1.XLim;

% Y軸直方圖
ax3=axes('Parent',gcf);hold(ax3,'on')
[f,yi]=ksdensity(PntSet(:,2));
fill([f,0],[yi,yi(1)],[0.34 0.47 0.71],'FaceAlpha',...
    0.3,'EdgeColor',[0.34 0.47 0.71],'LineWidth',1.2)
ax3.Position=[0.75,0.1,0.15,0.6];
ax3.XColor='none';
ax3.YTickLabel='';
ax3.TickDir='out';
ax3.YLim=ax1.YLim;

4使用方式擴(kuò)展–與ggplot修飾器聯(lián)動(dòng)

ggplot風(fēng)格修飾器:(點(diǎn)擊圖片跳轉(zhuǎn)鏈接)

示例1

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];

ax=gca;
ax.XLim=[-1 13];
ax.YLim=[-1 13];
ax=ggplotAxes2D(ax);

CData=density2C(PntSet(:,1),PntSet(:,2),0:0.1:15,0:0.1:15);
scatter(PntSet(:,1),PntSet(:,2),'filled','CData',CData);

是不是瞬間有那味了:

示例2

PntSet1=mvnrnd([2 3],[1 0;0 2],800);
PntSet2=mvnrnd([6 7],[1 0;0 2],800);
PntSet3=mvnrnd([8 9],[1 0;0 1],800);

PntSet=[PntSet1;PntSet2;PntSet3];

ax=gca;
ax.XLim=[-3 13];
ax.YLim=[-3 13];
ax=ggplotAxes2D(ax);

[~,~,XMesh,YMesh,ZMesh,colorList]=density2C(PntSet(:,1),PntSet(:,2),-2:0.1:12,-2:0.1:12);
colormap(colorList)
contourf(XMesh,YMesh,ZMesh,10)

以上就是Matlab繪制散點(diǎn)密度圖的教程詳解的詳細(xì)內(nèi)容,更多關(guān)于Matlab散點(diǎn)密度圖的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • C++文件讀取的4種情況匯總

    C++文件讀取的4種情況匯總

    前幾天要用到C++讀取文本文件,就學(xué)習(xí)了一下幾種不同的讀取方法,下面這篇文章主要給大家介紹了關(guān)于C++文件讀取的4種情況,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-01-01
  • 舉例說明自定義C++異常處理的實(shí)例

    舉例說明自定義C++異常處理的實(shí)例

    這篇文章主要介紹了舉例說明自定義C++異常處理的實(shí)例的相關(guān)資料,這里舉例說明該如何使用C++ 的異常,需要的朋友可以參考下
    2017-10-10
  • C語言打印各種圖案實(shí)例代碼

    C語言打印各種圖案實(shí)例代碼

    大家好,本篇文章主要講的是C語言打印各種圖案實(shí)例代碼,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2021-12-12
  • C++對(duì)象與繼承使用中一些問題介紹

    C++對(duì)象與繼承使用中一些問題介紹

    大家好,本篇文章主要講的是C++對(duì)象與繼承使用中一些問題介紹,感興趣的同學(xué)趕快來看一看吧,對(duì)你有幫助的話記得收藏一下,方便下次瀏覽
    2022-01-01
  • C語言實(shí)現(xiàn)哈夫曼編碼

    C語言實(shí)現(xiàn)哈夫曼編碼

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)哈夫曼編碼,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2020-04-04
  • VS報(bào)錯(cuò)C6011的問題:取消對(duì)NULL指針的引用(解決方法)

    VS報(bào)錯(cuò)C6011的問題:取消對(duì)NULL指針的引用(解決方法)

    這篇文章主要介紹了VS報(bào)錯(cuò)C6011的問題:取消對(duì)NULL指針的引用(解決方法),C6011:取消對(duì)NULL指針的引用,發(fā)現(xiàn)是沒有進(jìn)行空指針的判斷,解決方案跟隨小編一起看看吧
    2024-01-01
  • C++中棧結(jié)構(gòu)建立與操作詳細(xì)解析

    C++中棧結(jié)構(gòu)建立與操作詳細(xì)解析

    我們可以把棧理解成一個(gè)大倉(cāng)庫(kù),放在倉(cāng)庫(kù)門口(棧頂)的貨物會(huì)優(yōu)先被取出,然后再取出里面的貨物。而從數(shù)據(jù)的邏輯結(jié)構(gòu)來看,棧結(jié)構(gòu)起始就是一種線性結(jié)構(gòu)
    2013-10-10
  • linux c多線程編程實(shí)例代碼

    linux c多線程編程實(shí)例代碼

    這篇文章主要介紹了linux系統(tǒng)中的c多線程編程實(shí)例,大家可以參考使用以下代碼
    2013-11-11
  • C語言初學(xué)者代碼中的常見錯(cuò)誤與問題

    C語言初學(xué)者代碼中的常見錯(cuò)誤與問題

    C語言初學(xué)者犯過的很多錯(cuò)誤都非常典型,在初學(xué)者中非常普遍,于是整理了一下,應(yīng)該對(duì)其他初學(xué)者有借鑒意義
    2013-11-11
  • 整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解

    整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解

    今天小編就為大家分享一篇關(guān)于整型數(shù)據(jù)在內(nèi)存中存儲(chǔ)方式的講解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-02-02

最新評(píng)論

浮山县| 平塘县| 揭西县| 新乡县| 洛阳市| 平度市| 万荣县| 潼南县| 洞头县| 淮滨县| 东港市| 陇川县| 黑山县| 宁乡县| 昌平区| 上思县| 尖扎县| 温州市| 重庆市| 乡宁县| 泗水县| 南木林县| 中方县| 沙田区| 和顺县| 宁海县| 铅山县| 宕昌县| 多伦县| 原平市| 吉林市| 抚顺市| 乌审旗| 南皮县| 农安县| 盖州市| 清苑县| 兴安盟| 江城| 河东区| 腾冲县|