2012-08-06 276 views
5

我有100个样本数,我需要在matlab中绘制它们的正态分布曲线。在Matlab中绘制样本的正态分布图

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

回答

7

如果你有机会获得统计工具箱,功能histfit做什么,我想你需要:

>> x = randn(10000,1); 
>> histfit(x) 

Normal distribution plot

就像与hist命令还可以指定垃圾箱的数量,并且您还可以指定使用哪个分配(默认情况下是正态分布)。

如果您没有统计工具箱,可以使用@Gunther和@learnvst的答案的组合来重现相似的效果。

+2

+1不错,正是OP正在寻找的 – 2012-08-06 16:11:37

+0

woow。我正在寻找这个。谢谢 :) – ManiAm 2012-08-06 16:42:58

5

使用hist

hist(data) 

它吸引你的数据的直方图:

enter image description here

您还可以指定频段的数目得出,如:

hist(data,5) 

如果你只想绘制结果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); 

你大概可以覆盖这在以前hist图(我想你需要先然而,规模的东西,PDF格式是范围在0-1之间,和直方图是范围:每个容器的元素数量)。

4

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

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

在这个例子中,数组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); 

enter image description here