我想绘制对数正态分布,给定随机数量的输入作为蓝色散点,然后我必须在它们上面叠加红色曲线。我已经设法完成了第一项任务,但是在做超级气势的部分时,我的区域充满了颜色:
这是我在生成x和y
之后在我的代码中尝试过的plt.figure()
plt.plot(x,y,'bo')
plt.plot(x,y,'-bx')
plt.ylabel('Log normal distribution function values for y')
plt.xlabel('X, the generated random points from 0-10')
plt.show()
其中x和y以这种方式生成:
for i in range(0,10000):
x[i] = 10*random.random()
y[i]= (1/(x[i]*sigma*math.sqrt(2*math.pi))) * math.exp(-(((math.log(x[i])- mew))**2)/(2*((sigma)**2)))
答案 0 :(得分:2)
首先,与问题的要点无关,你真的应该避免使用循环来做这样的事情。相反,尝试类似下面的内容
sigma = 2
mew = 3
x = 10*random.random(100)
y= (1/(x*sigma*math.sqrt(2*math.pi))) * np.exp(-(((np.log(x)- mew))**2)/(2*((sigma)**2)))
(将sigma
,mew
和100更改为您喜欢的任何内容。)
(哦,另外一件事:除非你是猫,否则你可能意味着mu
,而不是mew
。)
现在,你可以做到
plt.figure()
plt.scatter(x,y)
hold(True)
plt.plot(x[np.argsort(x)], y[np.argsort(x)], 'r-')
plt.ylabel('Log normal distribution function values for y')
plt.xlabel('X, the generated random points from 0-10')
hold(False)
(请注意,对于plot
,您应该对x
和y
进行排序。)
这就是这样的: