如何生成多个高斯图?

时间:2019-08-02 07:45:53

标签: python python-3.x matplotlib

我正在尝试绘制多个均值和标准差都相同的高斯图,这意味着当第一个图在20处结束时,第二个图必须从20开始并在40处结束,峰值为30

mu = 10
sigma = 2
n = 2
x = np.linspace(0,n*20,n*20)
for i in range(0,n):
    pdf = stats.norm.pdf(x, n*mu, sigma)
    plt.plot(x, pdf)

但是这只给了我一个图像 enter image description here

我想生成的是:

所需的输出 enter image description here

有人可以告诉我我做的错误吗?

2 个答案:

答案 0 :(得分:1)

首先,您的两个高斯人的均值并不相同,因为一个均在10岁,另一个在30岁。

第二,您实际上是在创建一个高斯,平均值为n*mu=20。如果您需要生成多个高斯信号,则必须多次致电norm.pdf,例如循环中:

mus = [10,30]
sigmas = [2,2]
x = np.linspace(0,40,100)
pdf = np.zeros(shape=x.shape)
for m,s in zip(mus,sigmas):
    pdf += stats.norm.pdf(x, m, s)
plt.plot(x, pdf)

enter image description here

答案 1 :(得分:0)

您的代码存在的问题是:

pdf = stats.norm.pdf(x, n*mu, sigma)

您正在绘制相同的pdf,因为nloop内部没有变化,您可能想使用i而不是n。 除非它不起作用,因为i取值为01,因此mu变为020,您需要还要解决。 对于通常更清洁的方法,请查看其他答案。