![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=1738905205-PhGfZyHTBxUBLIGVJEeFOg9KitPl1fZo-0-de860baf01e9423d930a4f8902f73291)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/48_1.jpg?sign=1738905205-gDWFI1XZooUHTEAkTfQIUsAvJCHXW7PZ-0-db3c7dd07cea9d6b654434ad1e169baf)
2.运行结果(见图3-3)
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/49_1.jpg?sign=1738905205-TTltkNwxWkRhB7uDuIBV1vQEMURVFbA6-0-0749d0b8d499481b7d4acb30cab521b5)
图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=1738905205-tix7AR4nO2399FHiNRVlAaFkhShvBJHk-0-4d7523f6c3b6beb59bf2d297a40acb3a)
(2)设置积分区域。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_2.jpg?sign=1738905205-qZQylfDpTdD5x6YFpWEDwrst2w64JNoc-0-ea31b2b526eb3af39cb547cbab6ad940)
(3)绘制积分区域,其中,参数closed的取值表示不会将不规则多边形设置成封闭图形。也就是说,不规则多边形的起点和终点是不会重合的。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_3.jpg?sign=1738905205-VRNLplCY2aj41rIk72c4iDeQLIwEZi53-0-b22f1c53066511b8ee685fa538b1ef5c)
(4)添加无指示注解,注解内容是积分表达式。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/50_4.jpg?sign=1738905205-2SQ4AfRKH6j8JQDGwGIQOaUuCKLPTcXn-0-e4d3d06b1c6ebe0de2179ed2961454b5)
(5)通过向原始脚本中添加上面的Python代码,运行修改后的脚本,可以获得如图3-4所示的运行结果。
![](https://epubservercos.yuewen.com/39936E/13898203705421006/epubprivate/OEBPS/Images/51_1.jpg?sign=1738905205-fhuy2SJ7A8NHA0eb2T1qwxq0xOP8Jj6E-0-4dde4ce11e48855388745a500e9c1f6b)
图3-4