前些天被大神拉近了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,有兴趣也可关注一下