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

3.4 绘图区域嵌套子绘图区域

在一般情况下,我们不仅可以在一个绘图区域上进行数据可视化实践,还可以在一个绘图区域上嵌套子绘图区域,从而实现画布上的绘图区域的复合展示。下面,我们就通过嵌套直方图和分布函数曲线等图形,具体讲解绘图区域的嵌套的实现方法。

1.代码实现

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

图3-5

3.代码精讲

(1)通过调用“ax.plot(x,y,ls="-",lw=2,color="steelblue")”语句,绘制主绘图区域的折线图。其中,参数y是样本容量为200、均值为75和标准差为15的正态分布的数组。

(2)需要在主绘图区域嵌套第一个子绘图区域。具体而言,通过调用“plt.axes([0.2,0.6,0.2,0.2],axisbg="k")”语句实现子绘图区域的嵌套目标。函数 axes([0.2,0.6,0.2,0.2],axisbg="k")中的参数“[0.2,0.6,0.2,0.2]”表示主绘图区域的坐标轴经过归一化到0~1之间后的子绘图区域的位置和大小,即[left,bottom,width,height];参数 axisbg 用来设置子绘图区域的背景颜色,默认颜色是白色。根据“[0.2,0.6,0.2,0.2]”绘制子绘图区域上的直方图“plt.hist(y,bins,color="cornflowerblue")”。

(3)在子绘图区域的基础上,调用“plt.axes([0.21,0.72,0.05,0.05])”语句,继续绘制子绘图区域,实现子绘图区域的嵌套目标。

(4)在这个嵌套的子绘图区域上,调用“plt.plot(bins,y1,ls="-",color="r")”语句,绘制概率密度曲线。同时,调用“plt.xticks([])”和“plt.yticks([])”语句,将坐标轴的刻度线去掉。

同理,分别调用“plt.axes([0.65,0.6,0.2,0.2],axisbg="k")”和“plt.axes([0.66,0.72,0.05,0.05])”语句,绘制另外两个子绘图区域,完成子绘图区域的连续嵌套的任务。

(5)在这两个子绘图区域上,使用“plt.hist(y,bins,color="cornflowerblue",normed=True,cumulative=True,histtype="step")”语句绘制累积阶梯形直方图,使用“plt.plot(bins,y2,ls="-",color="r")”语句绘制分布函数曲线。

因此,“代码实现”部分的整体思路是:先在主绘图区域上嵌套子绘图区域,再在子绘图区域上嵌套更小的子绘图区域,从而分别在各自的绘图区域上绘制统计图形,完成统计图形的组合展示的工作。

4.内容补充

对于使用matplotlib 2.0.0及以上版本的读者而言,只需要将参数axisbg换成facecolor,就可以正常地执行脚本,获得运行结果。