【问题标题】:Matlab: How to plot normal curve from mean and standard deviationMatlab:如何根据平均值和标准差绘制正态曲线
【发布时间】:2016-07-20 04:23:52
【问题描述】:

我有一个平均值和标准偏差,我想绘制一条没有标签且没有网格线的正态曲线。我已经搜索并找到了这个:

r = mean + std.*randn(100,1);
histfit(r)

但这有直方图条、网格线和轴标记。

谢谢

【问题讨论】:

  • 旁注:meanstd 都是 matlab 中的函数,因此将它们用作变量并不是一个好主意。
  • @Memming 啊,很高兴知道!

标签: matlab visualization


【解决方案1】:

只需计算相应的Gaussian curve 并绘制它。

示例

让我们绘制一条均值为 4,标准差为 0.2 的高斯曲线:

mu = 4;                                %// Mean
sigma = 0.2                            %// Standard deviation

%// Plot curve
x = (-5 * sigma:0.01:5 * sigma) + mu;  %// Plotting range
y = exp(- 0.5 * ((x - mu) / sigma) .^ 2) / (sigma * sqrt(2 * pi));
plot(x, y)

%// Hide ticks
set(gca, 'XTick', [], 'XTickLabel', [], 'YTick', [], 'YTickLabel', [])

结果是:

【讨论】:

  • 酷,这似乎就在那里,我如何隐藏顶部和右侧轴刻度以及 x 和 y 轴上的标签?
  • @Aly 只需修改XTickXTickLabel', YTick` 和YTickLabel 属性,如图所示。我已经修改了答案。
【解决方案2】:

你为什么不使用:

R = normrnd(mu,sigma)
normplot(R)

【讨论】:

  • 请注意,normplot 需要统计工具箱。
【解决方案3】:

既然你有均值和标准差,你为什么不能画这个?

https://en.wikipedia.org/wiki/Normal_distribution

这就是您感兴趣的函数。只需遍历

范围内的值

(mean - 3*stddev) <= x <= (mean + 3*stddev)

【讨论】:

  • 最好使用该范围内的向量。循环可能很容易理解,但这是一个糟糕的习惯。
【解决方案4】:

您可以使用Normal probability density function。这与Eitan T's answer 相结合,将给出

mu = 4;                                %// Mean
sigma = 0.2                            %// Standard deviation

%// Plot curve
x = (-5 * sigma:0.01:5 * sigma) + mu;  %// Plotting range
plot(x, normpdf(x,mu,sigma));

%// Hide ticks
set(gca, 'XTick', [], 'XTickLabel', [], 'YTick', [], 'YTickLabel', [])

并且会产生相同的数字。只是您将使用 MATLAB 内置函数,而不是自己编写代码。

【讨论】: