![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=1738788960-4A7YzbauCgtaaw3bto5epCGq5GOsf1R1-0-43e6ff77e7a870621b62f0bf6e11a955)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/48_1.jpg?sign=1738788960-q3pElreX5cp94VypLByDcohLEsz79xsM-0-9e3ba0fa2b0e3a3ba2d1b1f56ffb8494)
2.运行结果(见图3-3)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/49_1.jpg?sign=1738788960-DiH5uqM5xn1M4bVS3zFHwZbxRlbPjoZX-0-eb1f85108be1c9e24179c4fc25bbef74)
图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=1738788960-ZePsb8Bu1Dryrs6t6Tf57Tkv0MQxNOOs-0-bd8a46895e4f9fb2eff01a6d18179dd8)
(2)设置积分区域。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_2.jpg?sign=1738788960-gyYXsdVsQMkLcrUKjSVV2FCFP9qRO2M1-0-8b59b88490d95455418abb4e5027379b)
(3)绘制积分区域,其中,参数closed的取值表示不会将不规则多边形设置成封闭图形。也就是说,不规则多边形的起点和终点是不会重合的。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_3.jpg?sign=1738788960-dIcCJ5cq89PQRpIt8hA4zkQ8CEPOr9bk-0-015d163c0f4fb109ee231c9db15157d8)
(4)添加无指示注解,注解内容是积分表达式。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_4.jpg?sign=1738788960-HISOdC3jzJETkQu0FTpKtPCwSmumqSAV-0-1dc191532b8e3eda26f2b598eebeae50)
(5)通过向原始脚本中添加上面的Python代码,运行修改后的脚本,可以获得如图3-4所示的运行结果。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/51_1.jpg?sign=1738788960-4e4kWZ9B1KEkX5r0ylDBvnVVvElJpvcs-0-176ddf102d3b2c349cc2625eb30820b1)
图3-4