matlab画二维数据直方图/画二维概率分布

数据来自混合高斯分布
![](http://www.forkosh.com/mathtex.cgi? \large Y=0.3X_1+0.6X_2+0.1X_3)
随机变量的均值如下, 各分量之间相互独立, 方差100

mu1=[-55,0,90];s1=100*eye(3,3);
mu2=[-30,-10,70];s2=s1;
mu3=[-20,20,150];s3=s1;

产生10,000个独立随机变量, 画出 X-Y Y-Z Z-X 的二维直方图

《matlab画二维数据直方图/画二维概率分布》 [X-Y] 分量的频率统计图

hist3 函数画直方图, set指令上色

hist3([reshape(data{i},[],1),reshape(data{i+1},[],1)],'nbins',[20 20])
set(gcf,'renderer','opengl');
set(get(gca,'child'),'FaceColor','interp','CDataMode','auto');

pcolor(xb,yb,n1) 在网格 (xb,yb) 中根据n1取值填充颜色 ; h.ZData一行目的把二维网格图下移,以便观察

 h = pcolor(xb,yb,n1);
 h.ZData = ones(size(n1)) * -max(max(n));

选择色调

    colormap(jet) % heat map %hot

view(3)可以改成view(2), 只显示在X-Y平面的投影

《matlab画二维数据直方图/画二维概率分布》 view(2):X-Y平面

为了在X-Y平面投影出更精细直观的分布图, 使用contourf函数

《matlab画二维数据直方图/画二维概率分布》 X-Y 等值分布

源程序如下:

clc;clear;close all;
% define number of observation
N=10000;
%example: Gaussian Mixture distribution
% specify multi-dimensional probability distribution
%[X Y Z] are independent for variance matrix is diagonal
mu1=[-55,0,90];s1=100*eye(3,3);
mu2=[-30,-10,70];s2=s1;
mu3=[-20,20,150];s3=s1;
% weight
p=[0.3 0.6 1];

XX=zeros(N,1);
YY=XX;
ZZ=XX;
dq=zeros(1,N);
for i=1:N
    %random variable generator
    dp=rand();
    if dp<p(1)
        r=mvnrnd(mu1,s1);
        dq(i)=1;
    else if dp >p(2)
            r=mvnrnd(mu3,s3);
            dq(i)=2;
        else
            r=mvnrnd(mu2,s2);
            dq(i)=3;
        end
    end
    XX(i)=r(1);
    YY(i)=r(2);
    ZZ(i)=r(3);
 
end
% visualize probability density on X-Y Y-Z Z-X panel
data{1}=XX;
data{2}=YY;
data{3}=ZZ;
data{4}=XX;
bins=[20 20];
for i=1:3
    figure(i)
    hist3([reshape(data{i},[],1),reshape(data{i+1},[],1)],'nbins',[20 20])
    
    set(gcf,'renderer','opengl');
    set(get(gca,'child'),'FaceColor','interp','CDataMode','auto');
    hold on
    dat=[reshape(data{i},[],1),reshape(data{i+1},[],1)];
    n = hist3(dat,'nbins',[20 20]); % default is to 10x10 bins
    n1 = n';
    n1(size(n,1) + 1, size(n,2) + 1) = 0;
    % Generate grid for 2-D projected view of intensities.
    xb = linspace(min(dat(:,1)),max(dat(:,1)),size(n,1)+1);
    yb = linspace(min(dat(:,2)),max(dat(:,2)),size(n,1)+1);
    % Make a pseudocolor plot.
    h = pcolor(xb,yb,n1);
    h.ZData = ones(size(n1)) * -max(max(n));
    colormap(jet) % heat map %hot
    grid on
    colorbar
    view(3);
    
    
    figure(i+10)
    n = hist3([reshape(data{i},[],1),reshape(data{i+1},[],1)],'nbins',[50 50]); % default is to 10x10 bins
    n1 = n';
    n1(size(n,1) + 1, size(n,2) + 1) = 0;
    xb = linspace(min(dat(:,1)),max(dat(:,1)),size(n,1)+1);
    yb = linspace(min(dat(:,2)),max(dat(:,2)),size(n,1)+1);
    [XXX,YYY]=meshgrid(xb,yb);
    contourf(XXX,YYY,n1)
    colormap('jet')%autumn
    grid
end



    原文作者:剪风
    原文地址: https://www.jianshu.com/p/a575e53bcaa9
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞