用Tableau画极坐标时钟

极坐标时钟(polar clock)是我在刚开始学习tableau的时候看到的一个作品Polar Clock in Tableau一下就被这个作品吸引住了,想尝试着复制一下,但是由于当时能力所限,完全…

极坐标时钟(polar clock)是我在刚开始学习tableau的时候看到的一个作品

__BLOCK_p__Polar Clock in Tableau

一下就被这个作品吸引住了,想尝试着复制一下,但是由于当时能力所限,完全不理解文章里的思路。随着学习的深入,现在再来看这个作品就觉得很简单了。

今天我来介绍一下制作方法,但这个方法是我根据原文进行了一定的改进,减少了数据集构造的难度,同时调整了一些计算字段。个人认为更简单一点。

但这篇文章跟以往的有些不同,我只介绍方法,不进行讲解,一是因为这个图形本身没有什么实际的用途,纯粹是练习技术,希望有兴趣的同学能够自己挑战,研究对比原文的方法,理解制作思路。这样才能真正有所提高。二是因为制作完成后图形是不能动的,需要调用 Tableau’s javascript API,我对前端了解甚少,没复制成功。

数据集很简单,表1是0-90,步长为1的等差数列,表2的Segment是用于区分时、分、秒, 引入数据集,通过link字段内连接两个表,数据集变成了270行。

IF (DATEPART('hour', NOW())) >= 12
    THEN (((DATEPART('hour', NOW()) + (DATEPART('minute', NOW())/60))-12)/12)*360
    ELSE ((DATEPART('hour', NOW()) + (DATEPART('minute', NOW())/60))/12)*360
END

//另一种写法
//(((DATEPART('hour', NOW()) + (DATEPART('minute', NOW())/60)) % 12)/12)*360
CASE [Segment]
WHEN 'hour' THEN .8*SIN(RADIANS([Hour]-([Index]*2*[Length])))
WHEN 'minute' THEN SIN(RADIANS([Minute]-([Index]*2*[Length])))
WHEN 'second' THEN 1.2*SIN(RADIANS([Second]-([Index]*2*[Length])))
END
CASE [Segment]
WHEN 'hour' THEN .8*COS(RADIANS([Hour]-([Index]*2*[Length])))
WHEN 'minute' THEN COS(RADIANS([Minute]-([Index]*2*[Length])))
WHEN 'second' THEN 1.2*COS(RADIANS([Second]-([Index]*2*[Length])))
END
IF 
[Segment]='hour' AND [Index]=0
   THEN IF DATEPART('hour', NOW()) > 12 THEN DATEPART('hour', NOW()) - 12 ELSE DATEPART('hour', NOW()) END
ELSEIF [Segment]='minute' AND [Index]=0
   THEN DATEPART('minute', NOW())
ELSEIF [Segment]='second' AND [Index]=0
   THEN DATEPART('second', NOW())
END

至于javascript API的部分,原文有代码,就请有能力的同学自己研究吧。

__BLOCK_p__Public地址:https://public.tableau.com/profile/jiangbin#!/vizhome/PolarClock_15674076553860/1
📖 相关文章
用Tableau画漏斗图的4种方法
用Tableau画延展条形图(Extended Bar Chart)
用Tableau画小提琴图
用Tableau画Voronoi-Treemap
用Tableau画桑基图-方法一(表计算)
——————————————————————————————

No comments yet