最近看到ken大神的滚动时间轴教程,非常的喜欢,就根据教程模仿了一下。实现起来不是很难,但是效果非常的好。
文章地址:https://www.flerlagetwins.com/2020/03/scrollable-timeline.html
下面我就根据自己的实现过程,把步骤和原理都讲一下,内容基于ken大神的博客,步骤略有更改。
创建数据集
美国总统数据集下载地址:http://w2h.cc/MWY2Z
先将数据集中的[Year]表和[Events]表做如下图的左连接:
由于Events表只有总统开始任期的年,所以为了保证时间轴是一个连续完整的动态效果,需要辅助的Year表,来构造一列连续的年。
创建计算字段
创建4个整数型参数
- Timeline Start 作为时间轴的开始年,默认开始是1789。
Timeline Years 作为时间轴的长度,默认值30。
Timeline End 作为时间轴的结束年,默认值结束是1818(1789+30)。
Timeline Step 作为每次时间轴滚动的年限,默认值10。
创建计算字段
- Year Filter=
IF [Year (Year)]>=[Timeline Start] AND [Year (Year)]<=[Timeline End] THEN
"Keep"
ELSE
"Exclude"
END
通过这个字段,就可以保证时间轴只显示开始时间和结束时间之间的年份。
- Is Event=
IF ISNULL([Event]) THEN
FALSE
ELSE
TRUE
END
通过这个字段确定哪些年份突出显示,哪些不显示。
开始做图
将[Year Filter]拖到筛选器,只保留“Keep”。
[Year (Year)]拖到列功能区。
在行功能区输入一个数字0,构造一个轴,标记选择“形状”。再输入一个0,构造另一个轴,标记选择“线”。双轴并同步轴。
将[Year (Events)]拖到标记栏的“标签”里。
将[Is Event]拖到标记栏的“形状”里,“真”选择圆形,“伪”选择一个“透明图形”。
最有意思的就是这个透明图形了,默认是没有的。我用PS做了一个透明图形,并输出成PNG格式。大家可以复制下来,找到“Tableau存储库”>“形状”文件夹,新建一个文件夹放,要不真是白茫茫一片,连自己都找不到。
如下图所示,基本的时间轴就做好了。
制作交互按钮
计算最大年、最小年
Year First={FIXED : MIN([Year (Year)])}
Year Last={FIXED : MAX([Year (Year)])}
制作右按钮
- Increase Year Start=
IF [Timeline End]+[Timeline Step] > [Year Last] THEN
[Year Last]-[Timeline Years]-1
ELSE
[Timeline Start]+[Timeline Step]
END
- Increase Year End=
IF [Timeline End]+[Timeline Step] > [Year Last] THEN
[Year Last]
ELSE
[Timeline End]+[Timeline Step]
END
新建一个工作表,按照下图制作一个右按钮:
制作左按钮
- Decrease Year Start=
IF [Timeline Start]-[Timeline Step] < [Year First] THEN
[Year First]
ELSE
[Timeline Start]-[Timeline Step]
END
- Decrease Year End=
IF [Timeline Start]-[Timeline Step] < [Year First] THEN
[Year First]+[Timeline Years]-1
ELSE
[Timeline End]-[Timeline Step]
END
新建一个工作表,按照下图制作一个左按钮:
制作仪表板
将三个工作表组合到仪表板中。
新建4个参数动作
通过这4个参数动作,当点击左、右按钮的时候,通过计算字段将值传入[Timeline Start]和[Timeline End]参数,然后影响[Year Filter],达到控制显示哪些年份的效果。
基本的滚动时间轴就介绍完了,美化工作我将在下一篇中介绍。
但是学会上面的内容,其实已经可以做一些应用了,我模仿南方都市报的疫情数据做了一个Viz,当然这个更复杂一点,但是基本知识完全不超出以上内容,大家可以下载研究。
https://public.tableau.com/profile/jiangbin#!/vizhome/COVID-19EventsofChina/1
此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下