美文网首页
用Tableau画极坐标时钟

用Tableau画极坐标时钟

作者: 扫地sir | 来源:发表于2019-09-26 10:38 被阅读0次

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

    http://stanke.co/polar-clock-in-tableau/

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

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

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

    构造数据集

    数据集很简单,表1是0-90,步长为1的等差数列,表2的Segment是用于区分时、分、秒,

    引入数据集,通过link字段内连接两个表,数据集变成了270行。

    创建参数

    • Length(控制环的大小)
    • Taper(控制尾部的粗细)


    创建计算字段

    • Hour=
    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
    
    • Minute=(DATEPART('minute',NOW())/60)*360

    • Second=(DATEPART('second',NOW())/60)*360

    • X=

    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
    
    • Y=
    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
    
    • Size=
    ([Taper]*[start point])+((1-[Taper])*(1-([Index]/90)))
    
    • Start point=
    IF [Index]=0 then 1.2
    ELSE 1
    END
    
    • Label
    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
    

    创建图形

    • [X]拖到列功能区,[Y]拖到行功能区,取消聚合
    • 标记类型选择线,[Segment]拖到颜色,[Index]拖到路径
    • 选择下图作为背景
    • 编辑背景图像的X、Y字段
    • 将[Size]拖动到大小,[Label]拖动到标签,稍微美化一下,就得到了下图的效果

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

    Public地址:https://public.tableau.com/profile/jiangbin#!/vizhome/PolarClock_15674076553860/1

    此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下

    相关文章

      网友评论

          本文标题:用Tableau画极坐标时钟

          本文链接:https://www.haomeiwen.com/subject/znqhyctx.html