2.10 直方图
使用Plotly绘制直方图需要用到graph_objs包中的Histogram函数。将数据赋值给函数中的x变量,即x = data,即可绘制直方图;若将数据赋值给y变量,则绘制水平直方图。histnorm是Histogram函数的另一个属性,默认状态下表示直方图的纵坐标落入区间内的样本数目;若设定histnorm = 'probability',则纵坐标变为落入区间内的样本频率。Histogram函数的其他常用属性将在后面的案例中提到。下面的案例使用 NumPy生成随机数,对基本的直方图进行实现,见文件2.10_HistogramsChart_1.py。
基本直方图的绘制效果如图2-31所示。
图2-31 基本直方图
本案例的代码如下。
下面介绍重叠直方图的绘制,需要在 Layout中设置 barmode属性,将其改为'overlay',如果不对其进行设置,会出现Plotly默认将两个直方图的柱形宽度强制变窄的情况,以满足重叠部分显示的需求。与Bar函数等相同,Histogram函数中也有opacity等通用属性,这里不再重复介绍。下面的案例使用 NumPy生成分别服从正态分布(Randn)与卡方分布(Chisquare)的两组数据,并使用直方图的形式加以展现,见文件2.10_HistogramsChart_2.py。
重叠直方图的绘制效果如图2-32所示。
图2-32 重叠直方图
本案例的代码如下。
绘制层叠直方图同样需要设置barmode属性,将其设置为'stack'。下面的案例使用NumPy生成两组相同的正态分布数据,trace0显示的是第一组数据,trace1显示的是第一组数据与第二组数据叠加的效果,见文件2.10_HistogramsChart_3.py。
层叠直方图的绘制效果如图2-33所示。
图2-33 层叠直方图
本案例的代码如下。
累积直方图是直方图的累积形式,即第n+1个区间的展示数目是第n-1个区间的展示数目与第 n个区间中实际样本数目之和,通过设置 Histogram函数中的cumulative属性实现,即cumulative=dict(enabled=True)。如图2-34所示是累积直方图的绘制效果,使用NumPy生成随机数据,见文件2.10_HistogramsChart_4.py。
图2-34 累积直方图
本案例的代码如下。
plotly.figure_factory包中的distplot函数将直方图与核函数估计可视化融合在一起,只需要将数据传递给distplot函数,即可完成相应的绘图。下面的案例使用NumPy生成分别服从柯西分布、泊松分布、Gamma分布和指数分布的4组数据,并使用distplot函数展现直方图及对应的核密度估计函数,见文件2.10_HistogramsChart_5.py。
直方图综合案例的绘制效果如图2-35所示。
图2-35 直方图综合案例
本案例的代码如下。
下面讲解直方图综合案例中使用的create_distplot函数和histogram函数的常用参数。
● histnorm:设置纵坐标显示格式,可选参数有""、percent、probability、density、probability density。若为percent或probability,则表示纵坐标显示样本占总体的百分比,所有矩形的高相加为100%;若为density,则每个小矩形的面积为所在范围内的样本的数量,所有矩形面积相加为样本总数;若为probability density,则每个小矩形的面积为所在范围内的样本占总体的比例,所有面积数值相加为1。
● histfunc:指定分组函数,可选参数有count、sum、avg、min、max。若为count,则按照统计样本落在区间内的个数操作;若为sum、avg、min、max,则依次对样本区间内的样本求和、取平均值、求最小值和求最大值。
● orientation:设置图形的方向,有v和h两个可选参数,v表示垂直显示,h表示水平显示。
● cumulative:累积直方图参数,有enabled、directio和currentbin三个关键字。其中,enabled是布尔型,设置为True会显示累积直方图,设置为False则不对频率或频数进行累积;direction用于设置累积方向,确定频率是从1~0(降序),还是从0到1(升序);currentbin有三个选择,即include、exclude、half,为了防止偏差,一般选择half。
● autobinx:布尔型,是否自动划分区间。
● nbinsx:整型,最大显示区间数目。
● xbins:设置划分区间属性,有start、end、size三个关键字。start设置起始坐标,end设置终止坐标,size设置区间长度。