美文网首页tableau技能
用Tableau画太极阴阳图

用Tableau画太极阴阳图

作者: 扫地sir | 来源:发表于2019-08-07 11:37 被阅读60次

    前些天被大神拉近了MOM的群,群里高手如云,刚进群就看到有人在讨论如何画太极阴阳图,结果已经有大神画好了,效果绝对令人艳羡。

    https://public.tableau.com/profile/redcat#!/vizhome/2_15638890497800/sheet0

    一般看到这种惊艳的图表,我就有尝试着自己画的冲动,但是经过研究也只是先把太极阴阳图画出来了,八卦图太难了,等有时间再研究吧(应该跟画圆形热力图的原理相似,只是需要确定各爻的位置)。

    其实思路并不难,如果你理解了前面“用Tableau画圆系列”的前三篇文章就具备了基本技巧,如果能理解的透彻一点,就可以灵活的控制圆心和半径,这是画太极图的根本。

    另外就是对多边形形成原理的理解,我在研究的时候也有些小困难,其实回想起来还是对多边形的原理有理解不到位的地方,最主要的就是起始点和结束点要一样才能闭合,如果不一样就会出现各种奇怪图形。

    下面说一下具体画法,数据集很简单,大家可以去百度网盘下载

    链接: https://pan.baidu.com/s/1TIgbMZSoVSRSo4SyYk_HXA 提取码: 6vf2

    point代表每一个点,sort用来区分是哪个图形上的点
    (一开始我用的是1800个点,每一个角度都用一个点,比如画个半圆就用180个点,但是对性能有些影响,还是听专家的建议,所以就除以4,每4度画一个点,当然也可以再缩小,但是如果太少,会导致圆形不平滑)

    然后建立计算字段

    • X=
    if 
    //阴鱼右侧半圆
           [sort]="阴鱼" AND [point]<=180 THEN SIN([point]*pi()/180)
    //阴鱼左下突出
    ELSEif [sort]="阴鱼" AND [point]<=360 THEN SIN([point]*pi()/180)*0.5
    //阴鱼右上凹陷
    ELSEif [sort]="阴鱼" AND [point]<=540 THEN SIN([point]*pi()/180)*0.5
    
    //阳鱼左侧半圆
    ELSEif [sort]="阳鱼" AND [point]<=180 THEN -SIN([point]*pi()/180)
    //阳鱼左下凹陷
    ELSEif [sort]="阳鱼" AND [point]<=360 THEN SIN([point]*pi()/180)*0.5
    //阳鱼右上突出
    ELSEif [sort]="阳鱼" AND[point]<=540 THEN SIN([point]*pi()/180)*0.5
    
    //阴眼
    ELSEif [sort]="阴眼" THEN SIN([point]*pi()/180)*0.15
    //阳眼
    ELSEif [sort]="阳眼" THEN SIN([point]*pi()/180)*0.15
    END
    
    • Y=
    if 
    //阴鱼右侧半圆
           [sort]="阴鱼" AND [point]<=180 THEN COS([point]*pi()/180)
    //阴鱼左下突出
    ELSEif [sort]="阴鱼" AND [point]<=360 THEN COS([point]*pi()/180)*0.5-0.5
    //阴鱼右上凹陷
    ELSEif [sort]="阴鱼" AND [point]<=540 THEN -COS([point]*pi()/180)*0.5+0.5
    
    //阳鱼左侧半圆
    ELSEif [sort]="阳鱼" AND [point]<=180 THEN COS([point]*pi()/180)
    //阳鱼左下凹陷
    ELSEif [sort]="阳鱼" AND [point]<=360 THEN COS([point]*pi()/180)*0.5-0.5
    //阳鱼右上突出
    ELSEif [sort]="阳鱼" AND [point]<=540 THEN -COS([point]*pi()/180)*0.5+0.5
    
    //阴眼
    ELSEif [sort]="阴眼" THEN COS([point]*pi()/180)*0.15+0.5
    
    //阳眼
    ELSEif [sort]="阳眼" THEN COS([point]*pi()/180)*0.15-0.5
    
    END
    
    • 拖动X到列功能区,Y到行功能区,取消聚合,标记选择多边形,[point]拖到路径中,[sort]拖到详细信息

    • [sort]拖动到颜色上,并手工调整顺序,保证“阴眼”和“阳眼”在最上层

    • 去掉不必要的线和轴,美化后最终效果如下

    整体来说原理并不难,我用下面这个动图演示一下画法,只要认真研究,就能明白

    这个是用最开始1800个点的方法做的,便于大家理解,上面X、Y计算字段的基本原理一样,略有不同,可以下载成品的Public研究:https://public.tableau.com/profile/jiangbin#!/vizhome/taijitu/1

    另外有一点是要说的,我对于太极图没有研究,阴鱼和阳鱼内部的S形曲线是不是可以用半圆来画?阴眼和阳眼的大小?这些我并不确定,所以这个只是作为探讨技术的途径,未必是真正的太极图画法哦。

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

    相关文章

      网友评论

        本文标题:用Tableau画太极阴阳图

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