绘制正态分布的直方图需要使用Python中的matplotlib库。下面是整个过程的详细步骤:
导入相关库
首先,我们需要导入matplotlib库,以及numpy库(生成随机数据):
import matplotlib.pyplot as plt
import numpy as np
生成随机数据
接下来,我们需要生成一个正态分布的随机数据集。可以使用numpy中的random
模块来生成:
mu, sigma = 0, 0.1 # 正态分布的均值和标准差
data = np.random.normal(mu, sigma, 10000) # 生成10000个数据点
上面的代码中,normal
函数用于生成正态分布,其中mu
和sigma
分别是分布的均值和标准差,10000
是数据点个数。
绘制直方图
有了数据之后,我们就可以绘制直方图了。在matplotlib中,可以使用hist
函数来绘制直方图。需要注意的是,由于直方图表示的是分布,因此应该将数据分成一定数量的“bin”,将数据点放到不同的“bin”中。
n, bins, patches = plt.hist(data, density=True, bins=50, alpha=0.5)
plt.show()
上面的代码中,hist
函数的参数包括:
data
:需要绘制直方图的数据density
:是否对数值进行归一化处理bins
:数据点分成的“bin”的数量alpha
:直方图的透明度,取值范围为0到1
绘制出来的直方图如下图所示:
配置直方图
可以通过set_title
、set_xlabel
和set_ylabel
函数来设置标题和坐标轴标签,从而使图表更加清晰易懂:
plt.hist(data, density=True, bins=50, alpha=0.5)
plt.title('Normal Distribution Histogram')
plt.xlabel('Value')
plt.ylabel('Frequency')
plt.show()
绘制多个直方图
可以使用subplots
函数来在同一图表中绘制多个直方图:
fig, axs = plt.subplots(1, 3, figsize=(12, 4), sharey=True, tight_layout=True)
# 绘制均值为0的正态分布
mu_0, sigma_0 = 0, 0.1
data_0 = np.random.normal(mu_0, sigma_0, 10000)
axs[0].hist(data_0, density=True, bins=50, alpha=0.5)
axs[0].set_title('Mean=0')
# 绘制均值为1的正态分布
mu_1, sigma_1 = 1, 0.5
data_1 = np.random.normal(mu_1, sigma_1, 10000)
axs[1].hist(data_1, density=True, bins=50, alpha=0.5)
axs[1].set_title('Mean=1')
# 绘制均值为2的正态分布
mu_2, sigma_2 = 2, 1
data_2 = np.random.normal(mu_2, sigma_2, 10000)
axs[2].hist(data_2, density=True, bins=50, alpha=0.5)
axs[2].set_title('Mean=2')
plt.show()
上面的代码中,subplots
函数的参数包括:
1
:绘制1行3
:绘制3列figsize
:图表的大小sharey
:共享y轴标度tight_layout
:调整子图之间的布局
效果如下图所示:
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何在Python中通过直方图绘制正态分布 - Python技术站