数据来自混合高斯分布
![](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 的二维直方图
![](https://img.haomeiwen.com/i1976358/bfefa80a9867b6ed.png)
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平面的投影
![](https://img.haomeiwen.com/i1976358/541cf4c26803dff2.png)
为了在X-Y平面投影出更精细直观的分布图, 使用contourf函数
![](https://img.haomeiwen.com/i1976358/bb73a4876d9bdf34.png)
源程序如下:
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
网友评论