中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Matlab怎么繪制散點密度圖

發布時間:2022-02-28 09:15:18 來源:億速云 閱讀:630 作者:小新 欄目:開發技術

小編給大家分享一下Matlab怎么繪制散點密度圖,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

    效果

    Matlab怎么繪制散點密度圖

    Matlab怎么繪制散點密度圖

    Matlab怎么繪制散點密度圖

    Matlab怎么繪制散點密度圖

    原理也很簡單,通過matlab自帶的ksdensity獲得網格每一點密度,通過密度擬合曲面,再計算每個數據點對應的概率,并將概率映射到顏色即可
    為了怕大家找不到函數這次工具函數放到最前面

    1工具函數完整代碼

    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參數說明

    輸入:

    • X,Y 散點坐標

    • XList,YList 用來構造密度曲面網格的序列,其實就是把XLim,YLim分成小份,例如XList=0:0.1:10

    • colorList 顏色表mx3數組,用來構造將高度映射到顏色函數的數據表

    輸出:

    • CData各個點對應顏色

    • h 各個點對應核密度

    • XMesh,YMesh,ZMesh 核密度曲面數據

    • 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');

    結果:

    Matlab怎么繪制散點密度圖

    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);

    Matlab怎么繪制散點密度圖

    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)

    Matlab怎么繪制散點密度圖

    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;

    Matlab怎么繪制散點密度圖

    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;

    Matlab怎么繪制散點密度圖

    4使用方式擴展&ndash;與ggplot修飾器聯動

    ggplot風格修飾器:(點擊圖片跳轉鏈接)

    Matlab怎么繪制散點密度圖

    示例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);

    是不是瞬間有那味了:

    Matlab怎么繪制散點密度圖

    示例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怎么繪制散點密度圖

    以上是“Matlab怎么繪制散點密度圖”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

    向AI問一下細節

    免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

    AI

    南皮县| 平安县| 武汉市| 合川市| 罗江县| 江口县| 常德市| 曲靖市| 天等县| 奉化市| 微博| 思南县| 定远县| 宣威市| 上虞市| 滦平县| 麻城市| 上杭县| 丁青县| 北辰区| 金华市| 祁门县| 沾化县| 唐河县| 炉霍县| 察雅县| 常德市| 泉州市| 理塘县| 栖霞市| 灌云县| 卢湾区| 喀什市| 阿坝县| 平江县| 上饶市| 清丰县| 汾阳市| 云浮市| 广河县| 周宁县|