![Python数据可视化之matplotlib精进](https://wfqqreader-1252317822.image.myqcloud.com/cover/900/25449900/b_25449900.jpg)
3.3 向直方图中添加概率密度曲线
我们可以单独使用直方图来描述定量数据的分布特征。如果给直方图添加一条概率密度曲线,就会更加明显地刻画定量数据的分布特征。
下面,我们就通过具体代码来展示绘制概率密度曲线的实现方法。
1.代码实现
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/47_1.jpg?sign=1739169227-0wLapKtvZoF8yA3OKIF0XIIBatl0r8QE-0-cf46106f6bc68da24390ed8918655570)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/48_1.jpg?sign=1739169227-oJ8qQSnQC00Xpe9QHNGAkQt9KXpXrDYQ-0-eefe4ced24cda167d68003ffdcf5c2f3)
2.运行结果(见图3-3)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/49_1.jpg?sign=1739169227-JCICrpzlaDNlL2yvXhXcBMSCyu6hY6sC-0-45d5b3532fde71ae085ead76e03e0278)
图3-3
3.代码精讲
(1)通过调用“mpl.rcParams["font.sans-serif"]=["FangSong"]”语句,设置中文字体类型是“仿宋”。
(2)调用实例方法hist()绘制直方图,同时将返回值分别赋给变量n、bins和patches。
注意:
实例方法中的参数normed用来设置y轴是否用概率密度表示数据的分布特征。在matplotlib 2.0.0及以上版本中,参数normed已经换成了density,如果同时使用这两个参数,那么执行结果会报错。
(3)通过调用“np.random.randn(500)”语句,我们获得的是样本容量为500的标准正态分布的样本,也就是说,正态分布经过标准化后服从标准正态分布,即均值是1、标准差是0的正态分布。需要补充的是,标准化公式是,如果X~N(μ,σ2),那么经过标准化后就有
。因此,我们使用公式
,获得样本容量是500、均值是60、标准差是2的正态分布的样本,即数组x。
(4)设置箱体的数量为50。
(5)通过调用“y=((1/(np.power(2*np.pi,0.5)*sigma))*np.exp(-0.5*np.power((bins-mu)/sigma,2)))”语句,计算箱体的边界值数组bins的概率密度值。然后通过调用实例方法plot()绘制关于bins和y的折线图,即概率密度曲线。
(6)使用实例方法text()向绘图区域添加文本,文本内容通过“r"$...$"”格式进行文本渲染,即使用mathtext方法实现文本渲染。
(7)使用实例方法 set_xlabel()、set_ylabel()和 set_title()向绘图区域添加中文内容,其中绘图区域的标题内容依然是使用mathtext方法来实现的。
4.内容补充
我们不仅可以向直方图中添加概率密度曲线,还可以在概率密度曲线的基础上绘制积分区域,用来表示数值在指定积分区域上的取值概率,也可以理解成数值落在指定区域上的可能程度。为了阐述问题的方便,我们将与图3-3相对应的脚本称作原始脚本。这样,为了绘制积分区域和添加积分表达式,我们可以向原始脚本中添加以下Python代码。
(1)导入模块patches中的类Polygon,这是一个可以绘制不规则多边形的类。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_1.jpg?sign=1739169227-dL3ZrGvvAkQyrDWPSUsODZ98CsxcBg20-0-d337112d24dee023f851fcb0ce67a4be)
(2)设置积分区域。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_2.jpg?sign=1739169227-ZPwMwQ5ymGW55d9s9bQtToBedA1UBnGv-0-15152848e6601ab16c3f4d53dbe69b94)
(3)绘制积分区域,其中,参数closed的取值表示不会将不规则多边形设置成封闭图形。也就是说,不规则多边形的起点和终点是不会重合的。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_3.jpg?sign=1739169227-uW5d2fzoCQlQ6RM32bGXP3bbQvtlgKTW-0-939bfc1039c42a7f63e53f62c929a49f)
(4)添加无指示注解,注解内容是积分表达式。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_4.jpg?sign=1739169227-RJ4wW4uYPikN04rhzOswnFddKmiYqKbu-0-d162663b3311c1c24ff821e064d5e76d)
(5)通过向原始脚本中添加上面的Python代码,运行修改后的脚本,可以获得如图3-4所示的运行结果。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/51_1.jpg?sign=1739169227-ZxKQ10lknqXquDvJ6E3zv7DV8P2sEizp-0-e3f89b3748ad5525bc66a34d935461e9)
图3-4