如何在Python中通过直方图绘制正态分布

如何在Python中通过直方图绘制正态分布

在这篇文章中,我们将讨论如何使用Python在直方图上绘制正态分布图。首先,我们将分别讨论直方图和正态分布图,然后我们将把两个图合并起来。

直方图

柱状图是一组数据点在用户定义的范围内排列的一种图形表示。与柱状图类似,柱状图通过将多个数据点归入逻辑区域或容器,将一系列数据压缩成易于解释的视觉对象。

为了绘制这个,我们将使用。

  • random.normal()方法用于寻找数据的正态分布。它有三个参数。
    • loc – (平均)铃铛顶部的位置。
    • Scale -(标准偏差)你希望图表的分布有多均匀。
    • size – 返回阵列的形状
  • Matplotlib库的Pyplot模块中的函数hist()是用来绘制直方图的。它的参数如下
    • data:这个参数是一个数据序列。
    • bin : 这个参数是可选的,包含整数、序列或字符串。
    • Density:这个参数是可选的,包含一个布尔值。
    • Alpha : 值是一个介于0和1之间的整数,它代表每个直方图的透明度。n的值越小,直方图就越透明。
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()

输出:

如何在Python中通过直方图绘制正态分布?

正态分布

正态分布图的特点是有两个参数。

  • 平均值,它代表了图表的最大值,图表总是对称的。
  • 还有标准差,它决定了超出平均值的变化量。较小的标准差(与平均值相比)看起来比较陡峭,而较大的标准差(与平均值相比)看起来比较平坦。

绘制正态分布图

  • NumPy arange()用于创建并返回一个均匀分布的ndarray实例的引用。
  • 在mean()和stdev()方法的帮助下,我们计算了平均数和标准差,并初始化为mean和sd变量。
  • 在plot()方法中,我们使用了一个方法pdf()来显示概率密度函数。这个pdf()方法存在于scipy.stats.norm.Ltd中。

示例:

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()

输出:

如何在Python中通过直方图绘制正态分布?

直方图上的正态分布

现在,我们已经完成了对直方图和正态分布图的分离讨论,但如果我们能在一个具有相同比例的图表中对它们进行可视化,那就太好了。这可以通过在同一个单元格中访问两个图表,然后使用plt.show()来轻松实现。现在,让我们来讨论一下用Python在直方图上绘制正态分布图。

我们认为,一些数据的直方图遵循正态分布。SciPy有多种方法可以用来估计随机变量的最佳分布,以及可以最好地模拟这种适应性的参数。例如,对于这个问题中的数据,可以找到最佳适应的正态分布的平均数和标准差,如下所示。

# Make the normal distribution fit the data: 
mu, std = norm.fit (data) # mean and standard deviation

Matplotlib库的Pyplot模块中的函数xlim()被用来获取或设置该轴的x极限。

语法: matplotlib.pyplot.xlim (*args, **kwargs)

参数:该方法使用以下参数,如下所述。

  • left : 使用此参数将xlim设置在左边。
  • right:使用此参数在右边设置xlim。
  • kwargs :这个参数是一个文本属性,控制标签的外观。

返回值:

  • left, right: 返回x轴的新极限值的一个元组。
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()

输出:

如何在Python中通过直方图绘制正态分布?

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

Numpy教程