🏷️ 分类:图表教程
直线的时间线非常简单,但是如果时间线很长,直线就不能满足要求了,曲线时间线(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 |
__BLOCK_p__这个参数用来确定每行之间的间距
__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