用Tableau画曲线时间线

🏷️ 分类:图表教程直线的时间线非常简单,但是如果时间线很长,直线就不能满足要求了,曲线时间线(Curved Timeline)网上一直没找到教程,在Tableau Public上的Viz倒是很多,基…

🏷️ 分类:图表教程

https://public.tableau.com/profile/ken.flerlage#!/vizhome/CurvedTimeline/Dashboard

直线的时间线非常简单,但是如果时间线很长,直线就不能满足要求了,曲线时间线(Curved Timeline)网上一直没找到教程,在Tableau Public上的Viz倒是很多,基本大同小异,所以只能自己慢慢拆解来寻找制作方法了,一开始一头雾水,断断续续研究了两三天才基本理清了思路。

数据分为两个表,第一个year表,只有Year和link字段,标记年份(年份最好是连续数据,也可以不连续,特殊情况下影响最后效果),另一个表是point表,只有Point和link字段标记20个数据点。

| Year | link |  | Point | link |
| --- | --- | --- | --- | --- |
| 1900 | link |  | 0 | link |
| 1901 | link |  | 1 | link |
| 1902 | link |  | 2 | link |
| 1903 | link |  | 3 | link |
| ...... | ...... |  | ...... | ...... |
| 2015 | link |  | 16 | link |
| 2016 | link |  | 17 | link |
| 2017 | link |  | 18 | link |
| 2018 | link |  | 19 | link |
Y Spacing
__BLOCK_p__这个参数用来确定每行之间的间距
image.png
__BLOCK_p__这个参数用来确定每行有多少年
__BLOCK_p__给每个数据点确定一个唯一值,假如1900年的20个点,就变成了190000-190019
__BLOCK_p__将数据集里的第一年转换成所在十年里的第1年,假如数据集的第一年是1905年,First Year就是1900年
__BLOCK_p__计算多少个数据点开始换行
__BLOCK_p__计算数据点在纵轴的位置,也就是在第几行
__BLOCK_p__ 计算数据集里的最大行数
__BLOCK_p__计算数据点在横轴的位置,也就是在第几列
__BLOCK_p__计算数据集的最后一年
IF [Row]%2 = 1 THEN

 IF [Year]=[Last Year] AND [Point]<>0 THEN

 NULL

 ELSE

 ([Year]%[First Year])%[Years Per Row] + [Point]/[Number of Points]

 END

ELSE

 IF [Year]=[Last Year] AND [Point]<>0 THEN

 NULL

 ELSE

 [Years Per Row]-1-([Year]%[First Year])%[Years Per Row] - [Point]/[Number of Points]

 END

END
给Row重新赋值

1. 如果是最后一年,只会显示第1个点,后面19个点就不显示了 2. 上面每个点的Row值,是从左到右排列的,现在如果是偶数行,要Row值从右到左重新计算,这样就可以按照S曲线排列了

IF [X]>([Years Per Row]-1) THEN

 "RIGHT"

ELSEIF [X]<0 THEN

 "LEFT"

ELSE

 "NONE"

END
计算哪些点需要画成弧线,以每行10年为例,都是第9年的19点画半圆(第1个点不用画圆),只是奇数行是右侧半圆,偶数行是左侧半圆
截止目前的基本效果,便于大家理解原理
__BLOCK_p__计算需要转换成曲线的点之间的角度
__BLOCK_p__ 计算每个需要转换成曲线的点的弧度
__BLOCK_p__ 计算两行正中间的值,给Y with Curve用
CASE [Curved]

  WHEN "RIGHT" THEN

   ([Years Per Row]-1)+0.5*COS(RADIANS([Angle]))

  WHEN "LEFT" THEN

   0-0.5*COS(RADIANS([Angle]))

  ELSE

   [X]

END
IF [Curved]<>"NONE" THEN

 [Center Y]+([Y Spacing]/2)*SIN(RADIANS([Angle]))

ELSE

 [Y]

END
计算需要转换成曲线的点X轴坐标,Y轴坐标

Curved=RIGHT或LEFT重新计算,正常在直线上的坐标点不计算

__BLOCK_p__这个应该根据情况自己调整,这个例子是每年都标记出来
维度、度量和参数

把X with Curve拖到列功能区,Y with Curve拖到行功能区,标记类型选择“线”,把ID拖到“路径”上,然后把Event拖到列功能区,标记类型选择“圆”,右键双轴,同步轴,把Event再拖到“工具提示”里。其他美化部分就不说了。

最终效果

效果图如下: 最上面的那个Viz效果,大家可以自行下载源文件研究

__BLOCK_p__年份最好是连续数据,也可以不连续,特殊情况下影响最后效果,关于这个问题,简单说一下,如果以10年为一行,那么如果数据缺失了第9年,那么相应的行圆弧就会缺右半边,如果缺失了第0年,相应的行圆弧就会缺左半边。大家可以自己试一下。

🏷️ 标签:Tableau、图表教程

📖 相关文章
用Tableau画曲线图系列(一)基础知识
用Tableau画漏斗图的4种方法
用Tableau画延展条形图(Extended Bar Chart)
用Tableau画小提琴图
用Tableau画Voronoi-Treemap
——————————————————————————————

No comments yet