本系列導航
用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,有興趣也可關注一下