可视化神器Plotly玩转直方图
统计图形中有一个图形叫做直方图,包含一维直方图和二维直方图(也叫做密度直方图);本文先介绍一维直方图的制作,主要还是基于两种方法的实现:
- 基于plotly_express
- 基于plotly.graph_objects
Plotly系列
Plotly的文章会形成连载系列,前面11篇Plotly可视化文章分别是:
- 酷炫!36张图爱上高级可视化神器Plotly_Express
- Plotly玩转散点图
- Plotly玩转饼图
- Plotly玩转漏斗图
- Plotly玩转柱状图
- Plotly玩转气泡图
- Plotly玩转股票图
- Plotly玩转甘特图
- Plotly玩转箱型图
- Plotly玩转面积图
- Plotly玩转小提琴图
直方图效果
引用一段百度百科对直方图的定义:
直方图(Histogram),又称质量分布图,是一种统计报告图,由一系列高度不等的纵向条纹或线段表示数据分布的情况。 一般用横轴表示数据类型,纵轴表示分布情况。
直方图的两个坐标分别是统计样本和该样本对应的某个属性的度量,以长条图(bar)的形式具体表现。
模拟数据
本文中的图形的绘制主要是基于Plotly中自带的消费数据集tips,主要的字段包含:
- 消费总金额:total_bill
- 小费:tip
- 付款人性别:sex
- 付款人是否抽烟:smoker
- 日期:day
- 就餐时间:time,午餐还是晚餐
- 就餐人数:size
1 | import plotly.express as px |
基于plotly_express实现
基础直方图
1 | fig = px.histogram(tips, x="total_bill") |
设置直方图部分元素
1 | fig = px.histogram( |
使用字段的分类值作为x轴
上面的例子中我们看到x轴的数据都是数值型的,其实我们也可以使用不同的分类作为x轴的label标签:
1 | fig = px.histogram( # 直方图中自动统计出现的个数 |
自定义区块个数bins
1 | fig = px.histogram( |
图形标准化方式选择
针对每个直方图有多种不同的标准化方式:
1 | 'percent', 'probability', 'density', 'probability density' |
1 | fig = px.histogram( |
分组直方图
根据字段的不同取值将直方图进行分组绘制;day字段有4种不同的取值:
1 | fig = px.histogram( |
1 | fig = px.histogram( |
不同聚合函数使用
直方图中默认使用的聚合函数是count,可以使用其他聚合函数
1 | fig = px.histogram( |
可视化直方图分布
在绘制了基础直方图之后,我们还可以在整个画布的边际绘制相关图形,辅助显示图形的分布规律,使用的参数是marginal(边际),通过其他图形来展示数据的规律:
1 | fig = px.histogram( |
基于go.Histogram实现
基础图形
1 | x = tips["total_bill"].tolist() |
图形标准化
图形标准化的方式和使用plotly_express是相同的:
1 | import plotly.graph_objects as go |
水平直方图
将传入的数据作为y轴的值即可绘制水平直方图:
1 | import plotly.graph_objects as go |
多个直方图的覆盖模式overlay
1 | import plotly.graph_objects as go |
多个直方图的堆叠模式stack
1 | import plotly.graph_objects as go |
指定聚合函数
针对同样的数据,可以在不同的轨迹中指定不同的聚合函数,下面的例子中:一个轨迹中指定为统计个数count,另一个轨迹中指定为求和sum
1 | import plotly.graph_objects as go |
累计直方图Cumulative Histogram
通过参数cumulative_enabled开启累计功能:默认表示的是个数上的累加。
1 | x = list(range(101)) |
个性化设置直方图
在下面的例子中绘制了两个直方图,使用的数据如下图中的x0和x1:
1 | fig = go.Figure() |