本系列导航
用Tableau画环形图系列(七)用Tableau画尖状环形图[翻译]
第一讲我们讲了画圆的基本原理,只简单划了一个圆,这是不够的,像跑马灯图的基础都是同心圆,那么同心圆怎么画呢?
复习一下第一讲:
圆上每个点的X坐标=a + sin(2*PI / 360*角度) * r ;Y坐标=b + cos(2*PI / 360*角度) * r
其实同心圆只有r,也就是半径不一样,其他都一样,这样就好办了。
其实我们只需要构造一张表,字段就是两个 point和R,加入我们要画一个半径为1和一个半径为2的同心圆,根据上一讲的思路,那么我们就需要做720行,前360行point是1-360,R是1,后360行point是1-360,R是2,然后用Tableau引入数据计算sin和cos,这样当然没有问题,但是很麻烦,如果同心圆更多就更麻烦了。
我们选用另一种方案
先构造一张point表
再做一张circle表(这次一次画五个同心圆)
引入Tableau,用内连接连接两张表,就会以笛卡尔积的形式构造好我们要的表5*361=1805行(因为0度和360度重合了,为了能让圆封闭上,大家可以自己试试0-359度画完了是什么样)
构造出的表就是这个样子
下面就是添加计算字段
拖入sin和cos拖入行列功能区,取消聚合,默认就是5个同心圆,但是如果你放大了,其实还是圆点,还需要用point作为路径把圆点串联起来。
把point拖入路径
靠,什么鬼?为什么?
其实如果你点击图表右键,查看数据,point每个值都是5个,作为路径point是按顺序连接的,所以就会连接5次0和然后连接5次1,以此类推,当然不是我们想要的。
我们需要把5个圆区分开,point作为路径才能依次连接每个圆内的0-360个点,所以拖入circle字段(也可以用R,但要转换成维度,离散型)到详细或者颜色都可以,这样才能把5个圆分区(大家可以再点击右键查看数据,看看数据是什么样的)
自此,同心圆就画好了。与一个圆的区别就是point路径要分区,这是重点要理解的,我在研究这个问题的时候就卡这里很久。
另外还有用数据桶来做的,也是为了构造一个笛卡尔积的表,只不过构造是在生成图表时完成,而我们用的连接表是在数据处理阶段,至于哪种效率更高,我没研究过。链接表的形式我觉得更直接更好理解,如果后续画跑马灯等图表,根据数据判断比例之类的复杂表计算时候,数据桶的方式我个人感觉会麻烦一点。如果有时间大家可以研究一下。
另外,出个题,上面的表画同心的半圆怎么画呢?
此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下