Python数据可视化之matplotlib精进
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

3.3 向直方图中添加概率密度曲线

我们可以单独使用直方图来描述定量数据的分布特征。如果给直方图添加一条概率密度曲线,就会更加明显地刻画定量数据的分布特征。

下面,我们就通过具体代码来展示绘制概率密度曲线的实现方法。

1.代码实现

2.运行结果(见图3-3)

图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的正态分布。需要补充的是,标准化公式是,如果XNμσ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,这是一个可以绘制不规则多边形的类。

(2)设置积分区域。

(3)绘制积分区域,其中,参数closed的取值表示不会将不规则多边形设置成封闭图形。也就是说,不规则多边形的起点和终点是不会重合的。

(4)添加无指示注解,注解内容是积分表达式。

(5)通过向原始脚本中添加上面的Python代码,运行修改后的脚本,可以获得如图3-4所示的运行结果。

图3-4