三角形面积图(Triangle Area Chart)由Tableau Zen Master Luke Stank创造。外形与漏斗图非常相似,但表达的信息却完全不同,它通过梯形(或三角形)的面积反应数量的大小。下图中梯形的面积就是各州销售额的占比。

绘制三角形面积图难度并不高,只要计算出梯形4个点的坐标位置,使用多边形将四个点按照顺序连接到一起即可。Luke使用的是5个点,由于首尾点的位置重合,所以在使用多边形时候,可以省略掉第5个点。这里的绘制逻辑请参考我以前写过的《用Tableau画漏斗图的4种方法》。
我们使用中文超市数据,但是由于每个地区需要4个点来完成,所以必须使用辅助数据源将数据扩充4倍。

新建计算字段
- 销售额占比:SUM([销售额])/WINDOW_SUM(SUM([销售额]))
- 累计销售额占比:RUNNING_SUM([销售额占比])
- 宽度:
IF COUNTD([Path])> 1 // 这里仅双轴添加标签时使用
then 0
ELSEIF MAX([Path])=1
THEN SQRT(ZN(LOOKUP([累计销售额占比],-1)))
ELSEIF MAX([Path])=2
THEN SQRT([累计销售额占比])
ELSEIF MAX([Path])=3
THEN -SQRT([累计销售额占比])
ELSE -SQRT(ZN(LOOKUP([累计销售额占比],-1)))
END
- 高度:
IF COUNTD ([Path]) > 1 // 这里仅双轴添加标签时使用
THEN (SQRT(ZN(LOOKUP([累计销售额占比], -1)))+ SQRT([累计销售额占比]))/2
ELSEIF MAX([Path]) = 1 OR MAX([Path])=4
THEN ZN(LOOKUP(SQRT([累计销售额占比]), -1))
ELSE SQRT([累计销售额占比])
END
按照下图,标记类型选择“多边形”,将“区域”字段拖到“颜色”栏,并使用销售额排序,“Path”字段拖到“路径”栏,将“宽度”和“高度”分别拖到行列功能区,表计算依据选择“区域”,就可以完成基本图形的绘制。

由于多边形无法添加标签,所以需要复制出一个“宽度”字段,标记类型改为“文本”,去掉“Path”字段,调整标签文本就完成了标签的添加。

为了方便大家理解,下图用交叉表列举了计算过程中涉及的主要指标,这里表计算过程中“path”作为方向,“区域”作为分区。

由于三角形面积图使用面积反应销售额占比,在视觉上并不容易区分出占比的大小和差异,所以适用的场景会受到一定限制。但是作为学习Tableau绘图原理,特别是表计算原理是一个非常好的案例。
此篇文章已发布到我的公众号: saodisir,有兴趣也可关注一下
网友评论