如何在Python绘制直方图上的正态分布?
在本文中,我们将讨论如何使用Python在直方图上绘制正态分布。首先,我们将分别讨论直方图和正态分布图,然后将这两个图合并在一起。
直方图
直方图是在用户定义的范围内排列的一组数据点的图形表示。与条形图类似,条形图通过将多个数据点分组到逻辑区域或容器中,将一系列数据压缩成易于解释的视觉对象。
为了绘制这个,我们将使用:
- random.normal()方法用于查找数据的正态分布。它有三个参数:
- loc –(平均值)钟形顶部所在的位置。
- 比例-(标准偏差)您希望图形分布的均匀程度。
- size – 返回数组的形状
- Matplotlib 库的Pyplot模块中的函数hist()用于绘制直方图。它有如下参数:
- data :这个参数是一个数据序列。
- bin :此参数是可选的,包含整数、序列或字符串。
- 密度:此参数是可选的,包含一个布尔值。
- Alpha :值是一个介于 0 和 1 之间的整数,表示每个直方图的透明度。 n 的值越小,直方图越透明。
Python3
import numpy as np
import matplotlib.pyplot as plt
# Generating some random data
# for an example
data = np.random.normal(170, 10, 250)
# Plotting the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='b')
plt.show()
Python3
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import statistics
# Plot between -30 and 30 with
# 0.1 steps.
x_axis = np.arange(-30, 30, 0.1)
# Calculating mean and standard
# deviation
mean = statistics.mean(x_axis)
sd = statistics.stdev(x_axis)
plt.plot(x_axis, norm.pdf(x_axis, mean, sd))
plt.show()
Python3
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# Generate some data for this
# demonstration.
data = np.random.normal(170, 10, 250)
# Fit a normal distribution to
# the data:
# mean and standard deviation
mu, std = norm.fit(data)
# Plot the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='b')
# Plot the PDF.
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit Values: {:.2f} and {:.2f}".format(mu, std)
plt.title(title)
plt.show()
输出:
正态分布
正态分布图的特点是两个参数:
- 平均值,代表图表的最大值,图表总是对称的。
- 还有标准偏差,它决定了超出平均值的变化量。较小的标准偏差(与平均值相比)显得更陡峭,而较大的标准偏差(与平均值相比)显得平坦。
绘制正态分布
- NumPy arange() 用于创建和返回对均匀分布的 ndarray 实例的引用。
- 借助mean()和stdev()方法,我们计算了均值和标准差,并初始化为均值和sd变量。
- 在 plot() 方法中,我们使用了一种方法pdf()来显示概率密度函数。这个pdf()方法存在于scipy.stats.norm 中。
例子:
蟒蛇3
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
import statistics
# Plot between -30 and 30 with
# 0.1 steps.
x_axis = np.arange(-30, 30, 0.1)
# Calculating mean and standard
# deviation
mean = statistics.mean(x_axis)
sd = statistics.stdev(x_axis)
plt.plot(x_axis, norm.pdf(x_axis, mean, sd))
plt.show()
输出:
直方图上的正态分布
现在,我们已经完成了直方图和正态分布图的分离讨论,但是如果我们可以在具有相同比例的图形中将它们可视化,那就太好了。这可以通过访问同一单元格中的两个图表然后使用plt.show()轻松实现。现在,让我们讨论使用Python在直方图上绘制正态分布。
我们认为某些数据的直方图服从正态分布。 SciPy 有多种方法可以用来估计随机变量的最佳分布,以及可以最好地模拟这种适应性的参数。例如,对于这个问题中的数据,可以找到最佳拟合正态分布的均值和标准差如下:
# Make the normal distribution fit the data:
mu, std = norm.fit (data) # mean and standard deviation
Matplotlib 库的 Pyplot 模块中的函数xlim() 用于获取或设置此轴的 x 限制。
Syntax: matplotlib.pyplot.xlim (*args, **kwargs)
Parameters: This method uses the following parameters, as described below:
- left: Use this parameter to set xlim to the left.
- Right: Use this parameter to set xlim on the right.
- ** kwargs: This parameter is a text attribute that controls the appearance of the label.
Return value:
- left, right: return a tuple of the new limit value of the x-axis.
蟒蛇3
import numpy as np
from scipy.stats import norm
import matplotlib.pyplot as plt
# Generate some data for this
# demonstration.
data = np.random.normal(170, 10, 250)
# Fit a normal distribution to
# the data:
# mean and standard deviation
mu, std = norm.fit(data)
# Plot the histogram.
plt.hist(data, bins=25, density=True, alpha=0.6, color='b')
# Plot the PDF.
xmin, xmax = plt.xlim()
x = np.linspace(xmin, xmax, 100)
p = norm.pdf(x, mu, std)
plt.plot(x, p, 'k', linewidth=2)
title = "Fit Values: {:.2f} and {:.2f}".format(mu, std)
plt.title(title)
plt.show()
输出: