这里说的Tree Diagram并不是Tableau智能显示里自带的矩形树图Treemaps,其实是桑基图的变形。例如Ken大神的这个Viz。
![](https://img.haomeiwen.com/i13953618/cb1f83dd06c6d683.png)
https://public.tableau.com/profile/ken.flerlage#!/vizhome/AdjustableTreeDiagramTemplate/Tree
但要注意的是,这个例子里并不是用sigmoid函数来计算曲线的,这个图的第一个版本是用sin函数计算曲线,这个新的版本是用(10
*[t]^3) - (15*[t]^4) + (6*[t]^5)来计算曲线,不管用什么函数,形状都差不多。我就用sigmoid函数来介绍方法。
另外如果对sigmoid函数画曲线的原理不理解的话,可以看Ken大神的另外一个Viz。
![](https://img.haomeiwen.com/i13953618/1fe0ecc81bd06c5a.png)
也可以翻看我以前写的桑基图文章。
建立数据集
分层数据
第一层,第二层,第三层,link
节点1,节点1-1,节点1-1-1,link
节点1,节点1-1,节点1-1-2,link
节点1,节点1-1,节点1-1-3,link
节点1,节点1-1,节点1-1-4,link
节点1,节点1-2,节点1-2-1,link
节点1,节点1-2,节点1-2-2,link
节点1,节点1-2,节点1-2-3,link
节点1,节点1-2,节点1-2-4,link
节点1,节点1-3,节点1-3-1,link
节点1,节点1-3,节点1-3-2,link
节点1,节点1-3,节点1-3-3,link
辅助表
link,path,t
link,1,-6
link,2,-5.75
link,3,-5.5
link,4,-5.25
link,5,-5
link,6,-4.75
link,7,-4.5
link,8,-4.25
link,9,-4
link,10,-3.75
link,11,-3.5
link,12,-3.25
link,13,-3
link,14,-2.75
link,15,-2.5
link,16,-2.25
link,17,-2
link,18,-1.75
link,19,-1.5
link,20,-1.25
link,21,-1
link,22,-0.75
link,23,-0.5
link,24,-0.25
link,25,0
link,26,0.25
link,27,0.5
link,28,0.75
link,29,1
link,30,1.25
link,31,1.5
link,32,1.75
link,33,2
link,34,2.25
link,35,2.5
link,36,2.75
link,37,3
link,38,3.25
link,39,3.5
link,40,3.75
link,41,4
link,42,4.25
link,43,4.5
link,44,4.75
link,45,5
link,46,5.25
link,47,5.5
link,48,5.75
link,49,6
两个表建立内连接
![](https://img.haomeiwen.com/i13953618/7084d27d257fcc4b.png)
创建计算字段
- [Curve]=1/(1+EXP(1)^-[t])
用sigmoid函数画曲线
-
[第一层节点间距]=SUM(1/{FIXED : COUNTD([第一层])})
-
[第一层节点位置]=INDEX()*[第一层节点间距] - [第一层节点间距]/2
-
[第二层节点间距]=SUM(1/{FIXED : COUNTD([第二层])})
-
[第二层节点位置]=INDEX()*[第二层节点间距] - ([第二层节点间距]/2)
这里最巧妙的步骤就是,自动计算每个节点的位置,由于sigmoid函数会映射到0,1之间,所以节点的位置也控制在0,1之间。
以第二层为例计算逻辑如下表,第二层三个节点的index值为1,2,3,乘以[第二层节点间距]的值确定了在0-1之间的位置,再减去[第二层节点间距]/2,相当于将三个点都往下移了0.17,这样三个点在0-1之间的位置就居中了。
![]()
- [曲线1-2]=[第一层节点位置] + (([第二层节点位置] - [第一层节点位置]) * ATTR([Curve]))
开始画图
新建工作表1
-
将[第一层节点位置]拖到行功能区,标记选择“圆”。
-
将[第二层]、[第三层],拖到筛选器,并都右键选择“添加到上下文”
由于上下文的优先级高于fixed函数,所以调整筛选器时,fixed函数可以重新计算,从而重新确定节点位置。
- 右键编辑轴,固定轴在0-1之间。
新建工作表2
-
将[第一层]、[第二层]字段拖到标记“详细信息”上。
-
将[第二层节点位置]拖到行功能区,标记选择“圆”,右键编辑计算依据为[第二层]。
-
将[第二层]、[第三层],拖到筛选器,并都右键选择“添加到上下文”。
-
右键编辑轴,固定轴在0-1之间。
新建工作表3
-
将[第一层]、[第二层]字段拖到标记“详细信息”上,选择“线”。
-
将[t]拖到列功能区,右键改为维度。
-
将[曲线1-2]拖到行功能区,右键编辑表计算,如下图
![](https://img.haomeiwen.com/i13953618/25c95045f343bb97.jpg)
-
将[第二层]、[第三层],拖到筛选器,并都右键选择“添加到上下文”。
-
右键编辑轴,固定轴在0-1之间。
组合工作表
将三个工作表组合到一个仪表板,去掉不必要的线,并调整左侧布局里的外边距为0,因为默认为4,会导致工作表有白边。
这样基本上就搞定了第一层和第二层,如果觉得曲线头部太尖了,也可以调整t值的范围,我这里将t值固定在了-4.2到6之间,如下图。
![](https://img.haomeiwen.com/i13953618/313589b6eb34c2dc.png)
关于如何建立第三层的,我这里省略掉,大家可以根据对上面的理解,自己摸索一下。
这里提示一下,后面每新增一层都需要新建3个计算字段和2个工作表。也可以到我的public上下载我做好的示例。
![](https://img.haomeiwen.com/i13953618/485024a619a201ea.gif)
https://public.tableau.com/profile/jiangbin#!/vizhome/3_15802310336470/1
此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下
网友评论