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

Matlab繪制散點密度圖的教程詳解

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

效果

原理也很簡單,通過matlab自帶的ksdensity獲得網(wǎng)格每一點密度,通過密度擬合曲面,再計算每個數(shù)據(jù)點對應(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 散點坐標
  • XList,YList 用來構(gòu)造密度曲面網(wǎng)格的序列,其實就是把XLim,YLim分成小份,例如XList=0:0.1:10
  • colorList 顏色表mx3數(shù)組,用來構(gòu)造將高度映射到顏色函數(shù)的數(shù)據(jù)表

輸出:

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

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散點賦色

將上面那段代碼改寫

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帶直方圖的散點圖

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使用方式擴展–與ggplot修飾器聯(lián)動

ggplot風格修飾器:(點擊圖片跳轉(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繪制散點密度圖的教程詳解的詳細內(nèi)容,更多關(guān)于Matlab散點密度圖的資料請關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

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

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

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

    舉例說明自定義C++異常處理的實例

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

    C語言打印各種圖案實例代碼

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

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

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

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

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

    VS報錯C6011的問題:取消對NULL指針的引用(解決方法)

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

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

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

    linux c多線程編程實例代碼

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

    C語言初學者代碼中的常見錯誤與問題

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

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

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

最新評論

涡阳县| 娱乐| 卫辉市| 洛阳市| 武冈市| 分宜县| 博野县| 元阳县| 万荣县| 博兴县| 句容市| 静乐县| 三江| 乌什县| 托克托县| 玉林市| 芜湖县| 金寨县| 安吉县| 霍山县| 内丘县| 宜兰县| 阜阳市| 涿州市| 和田市| 习水县| 那坡县| 阜新| 济源市| 东源县| 锡林郭勒盟| 延长县| 新邵县| 哈巴河县| 永福县| 武乡县| 孝感市| 定陶县| 左贡县| 鄯善县| 浠水县|