好的。首先,我们需要简单介绍一下Numpy和Matplotlib这两个库。
Numpy
NumPy(Numerical Python)是 Python 语言的一个扩展程序库,支持大量的维度数组与矩阵运算,同时也针对数组运算提供大量的数学函数库。这是 Python 语言的开源软件之一,也是数据分析、数据处理和科学计算等领域最常用的库之一。
Matplotlib
Matplotlib 是 Python 编程语言及其数值数学扩展库 NumPy 的可视化操作界面,它为利用 Python 的强大编程语言和丰富的科学计算库,可生成各种硬拷贝格式和交互式环境可视化,2D 图表的软件包。
接下来我们来介绍如何使用 Numpy 和 Matplotlib 绘制正态分布图:
1. 导入库
首先,我们需要导入相关的库,即 Numpy 和 Matplotlib。
import numpy as np
import matplotlib.pyplot as plt
2. 生成正态分布的数据
接下来,我们需要生成正态分布的数据。这里我们使用 Numpy 库中的 random 模块,调用 randn() 方法生成一定数量的随机数。这些随机数将服从标准正态分布,即均值为0,标准差为1。
data = np.random.randn(1000)
3. 绘制直方图
接下来,我们利用 Matplotlib 库来将数据绘制成直方图。Matplotlib 库中的 hist() 方法,可以用于绘制直方图。下面的代码将绘制出 30 个区间的直方图,并将数据标准化。
plt.hist(data, bins=30, density=True, alpha=0.5, color='red')
plt.show()
其中,bins 参数指定直方图的区间数量,density 参数指定是否标准化数据,alpha 参数指定透明度,color 参数指定颜色。
4. 绘制密度曲线
接下来,我们将绘制正态分布的密度曲线。我们可以使用 Scipy 库中的 stats 模块中的 norm() 方法来计算正态分布的密度分布。下面的代码将绘制正态分布的密度分布,并与直方图叠加在一起。
from scipy.stats import norm
x = np.linspace(-4, 4, 100)
plt.plot(x, norm.pdf(x), 'b-', lw=2, alpha=0.5)
plt.hist(data, bins=30, density=True, alpha=0.5, color='red')
plt.show()
其中,norm() 方法中的参数分别代表分布的均值和标准差(默认为0和1)。x = np.linspace(-4, 4, 100) 创建了一系列 x 值,覆盖了从 -4 到 4 的范围,包含 100 个值。plt.plot(x, norm.pdf(x), 'b-', lw=2, alpha=0.5) 绘制了密度函数的图像,其中 'b-' 表示使用蓝色实线,lw=2 表示使用宽度为 2 的线条,alpha=0.5 表示线条的透明度为 0.5。
最后的效果如下所示:
示例1
接下来,我们将介绍如何根据一组数据的均值和方差绘制正态分布图。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
mean = 10
std = 3
data = np.random.normal(mean, std, size=1000)
x = np.linspace(mean - 3*std, mean + 3*std, 100)
plt.plot(x, norm.pdf(x, mean, std), 'r-', lw=2, alpha=0.6)
plt.hist(data, bins=30, density=True, alpha=0.5, color='blue')
plt.show()
首先,我们定义一个均值和方差分别为 10 和 3 的正态分布,使用 Numpy 库中的 random.normal() 方法来生成一组有 1000 个数据的样本数据。接下来,我们使用 scipy.stats.norm.pdf() 方法来计算均值为 10,标准差为 3 的正态分布密度分布,并将其与样本数据一起绘制。最后的效果如下所示:
示例2
接下来,我们将展示如何在一个图中绘制多组正态分布图。
import numpy as np
import matplotlib.pyplot as plt
from scipy.stats import norm
data1 = np.random.normal(5, 1.5, size=1000)
data2 = np.random.normal(10, 2, size=1000)
data3 = np.random.normal(15, 2.5, size=1000)
x = np.linspace(0, 25, 100)
plt.plot(x, norm.pdf(x, 5, 1.5), 'b-', lw=2, label='mean=5, std=1.5')
plt.plot(x, norm.pdf(x, 10, 2), 'r-', lw=2, label='mean=10, std=2')
plt.plot(x, norm.pdf(x, 15, 2.5), 'g-', lw=2, label='mean=15, std=2.5')
plt.hist(data1, bins=30, density=True, alpha=0.3, color='blue')
plt.hist(data2, bins=30, density=True, alpha=0.3, color='red')
plt.hist(data3, bins=30, density=True, alpha=0.3, color='green')
plt.legend(loc='best')
plt.show()
首先,我们生成了三组均值和方差不同的正态分布数据,分别为均值为 5,标准差为 1.5;均值为 10,标准差为 2;均值为 15,标准差为 2.5。接下来,我们使用 scipy.stats.norm.pdf() 方法来计算这三个正态分布的密度分布,并将其绘制在同一张图中。同时,我们使用 hist() 方法,将这三组数据绘制成直方图,最后的效果如下所示:
以上是使用 Numpy 和 Matplotlib 绘制正态分布图的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:使用Numpy和Matplotlib绘制正态分布图 - Python技术站