在Matlab中绘制样本的正态分布图

Man*_*iAm 5 matlab normal-distribution

我有100个采样数,我需要在matlab中绘制它们的正态分布曲线.

这些采样数据的平均值和标准差可以很容易地计算出来,但是有没有绘制正态分布的函数?

Sam*_*rts 7

如果您可以访问Statistics Toolbox,则该功能可以histfit执行我认为您需要的功能:

>> x = randn(10000,1);
>> histfit(x)
Run Code Online (Sandbox Code Playgroud)

正态分布图

hist命令一样,您也可以指定bin的数量,还可以指定使用的分布(默认情况下,它是正态分布).

如果您没有统计工具箱,则可以使用@Gunther和@learnvst的答案组合再现类似的效果.


Gun*_*uyf 5

使用hist:

hist(data)
Run Code Online (Sandbox Code Playgroud)

它绘制了数据的直方图:

在此输入图像描述

您还可以指定要绘制的箱数,例如:

hist(data,5)
Run Code Online (Sandbox Code Playgroud)

如果您只想绘制生成的pdf,请使用以下命令自行创建:

mu=mean(data);
sg=std(data);
x=linspace(mu-4*sg,mu+4*sg,200);
pdfx=1/sqrt(2*pi)/sg*exp(-(x-mu).^2/(2*sg^2));
plot(x,pdfx);
Run Code Online (Sandbox Code Playgroud)

你可能可以在前一个hist图上叠加这个(我认为你需要先缩放一些东西,但pdf在0-1范围内,直方图在范围内:每个bin的元素数).


lea*_*vst 5

如果要为数据绘制高斯分布,可以使用以下代码,将平均值和标准差值替换为根据数据集计算的值.

STD = 1;
MEAN = 2;
x = -4:0.1:4;
f = (   1/(STD*sqrt(2*pi))   )  *  exp(-0.5*((x-MEAN)/STD).^2  );

hold on; plot (x,f);
Run Code Online (Sandbox Code Playgroud)

该阵列x在这个例子中是你的发行版的X轴,因此改变对你有什么范围和采样密度.

如果您想在没有信号处理工具箱的帮助下绘制高斯拟合数据,下面的代码将绘制具有正确缩放比例的图.只需替换y为您自己的数据.

y = randn(1000,1) + 2;
x = -4:0.1:6;

n = hist(y,x);

bar (x,n);

MEAN = mean(y);
STD = sqrt(mean((y - MEAN).^2));


f = (   1/(STD*sqrt(2*pi))   )  *  exp(-0.5*((x-MEAN)/STD).^2  );
f = f*sum(n)/sum(f);

hold on; plot (x,f, 'r', 'LineWidth', 2);
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述