【114】Python小例子:numpy.random.randn生成符合正态分布的数据,并画出正态分布的钟曲线。

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/zhangchao19890805/article/details/79768663

自己学习python 随手写的一个小例子。先利用 numpy.random.randn生成符合正态分布的数据,然后再给这些数据画正态分布的曲线图。

import numpy as np
import matplotlib.pyplot as plt

size=2000
X = np.array(range(1,1+size))
# 利用 numpy.random.randn 函数生成符合正态分布的随机数。
Y = np.random.randn(size)  

# 第一个散点图
fig = plt.figure()
fig.set_size_inches(10, 4) # 整个绘图区域的宽度10和高度4
ax1 = fig.add_subplot(1, 2, 1) # 整个绘图区分成一行两列,当前图是第一个。
ax1.set_title("san dian")
ax1.set_xlabel("X")
ax1.set_ylabel("Y")
ax1.scatter(X, Y)

# 统计正态分布的时候,每个取值范围的大小。
interval = 0.5
X2 = [-3.0, -2.5, -2.0, -1.5, -1.0, -0.5, 0, 0.5, 1, 1.5, 2.0, 2.5, 3.0]

Y2 = [0,0,0,0,0,0,0,0,0,0,0,0,0]
for i in range(size):
    y = Y[i]
#   正态分布的中间取值范围,这里指零周围的取值范围。
    middle = (len(X2) + 1) / 2 - 1
    if y >= -0.5 * interval and y < 0.5 * interval:
        Y2[middle] += 1
        continue

#   去掉中间的零后,剩下单侧的取值范围的个数。比如在统计的时候,包含零
#   在内有13个取值范围,去掉零后还剩12个。因为正态分布左右对称,所以左
#   侧有六个取值范围,右侧也有六个取值范围。
    half = (len(X2)-1) / 2
#   零左侧的取值范围。
    for j in range( half ):
        if y >= -(0.5 + j + 1) * interval and y < -(0.5 +j) * interval:
            Y2[middle - j - 1] += 1
            continue
#   零右侧的取值范围。
    for j in range(half):
        if y >= (0.5 + j) * interval and y < (0.5 + j + 1) * interval:
            Y2[middle + j + 1] += 1
            continue

ax2 = fig.add_subplot(1, 2, 2)
ax2.set_title("dsds")
ax2.set_xlabel("X2")
ax2.set_ylabel("Y2")
ax2.scatter(X2,Y2)
ax2.plot(X2, Y2)
plt.show()

猜你喜欢

转载自blog.csdn.net/zhangchao19890805/article/details/79768663