小白并非此图的原创,该图来源于tableau public,我是从群里拿到的,所以并不知道准确的原创是谁
在此小白只是解析做图过程,由于太过繁杂,解释清楚整个过程对我来讲是一种挑战,将用一种循序渐进的方式来讲解,会有几个练习,一步一个铺垫,都是为了做玫瑰图做准备
先上图吧(小白使用其它数据,可能与这个图不是一模一样):
练习一: 使用12条每月的记录数,做一个圆形的散点图,请参照下方的数据与图例 Order_date sales 2013/1/1 215229.21 2013/2/1 149129 2013/3/1 171790.95 2013/4/1 143738.82 2013/5/1 218862.15 2013/6/1 155990.53 2013/7/1 166914.92 2013/8/1 288185.07 2013/9/1 267567.24 2013/10/1 378211.99 2013/11/1 375129.18 2013/12/1 321610.77 生成以上数据的脚本: select DATEADD(DAY, 1-DAY([Order Date]),convert(date,[Order Date] )) as Order_date, SUM(Sales) as sales from Orders
where YEAR([Order Date]) = 2013
group by DATEADD(DAY, 1-DAY([Order Date]),convert(date,[Order Date] )) order by DATEADD(DAY, 1-DAY([Order Date]),convert(date,[Order Date] ))
1、打开Tableau Desktop,选择相应的数据库(把上面的数据存储在EXCEL也可以),选择自定义SQL,输入上面的脚本;
2、将字段Order Date拖至标记功能区,右击该字段,选择“月”; 3、创建计算字段,字段名称“x”,COS((INDEX()-1)*(2*PI()/WINDOW_MAX(INDEX()))) 创建计算字段,字段名
称
“y”
,
内内
容容
为为
::
SIN((INDEX()-1)*(2*PI()/WINDOW_MAX(INDEX()))) 注解:正弦余弦就不赘述了,如果不懂去翻书吧 WINDOW_MAX()是为了求得窗体内最大的值,WINDOW_MAX(INDEX())就是为了求得最大的索引值(说白了就是序列号)
4、将X字段拖至列功能区,右击该字段,编辑表计算:
根据以下因素计算:Order_date 所在级别: Order_date 月 重新启动间隔: 无
将Y字段拖至行功能区,与X字段设置相同
4、按住CTRL键,将标记功能区中的[Order_date]拖至筛选器,选择“月”;
5、通过选择不同的月份,我们可以看到,无论有几个月份,里面所有的点都处于均匀的角度分布;
小结:
以上的练习是为了让大家了解,如何将各个分区均匀分布,无论是12个月,或者是5个月,或者是7个月,都是均匀分布的
练习二:
只用两条数据: ID 1 102
来做一个多边形扇形
1、打开Tableau Desktop,选择数据源,该数据源之包含两条记录: 1、102
2、在工作表设计界面,右键度量中的id,创建-->数据桶,弹出窗体中 数据桶大小:1
3、将id(数据桶), 拖至行功能区,右击,选择“显示缺省值” ,可以看到,原来只有1和102两条记录,现在数据变为1至102, 而后将该字段拖至标记功能区
4、分别创建计算字段x, y 字段
内
容
分
别
为
:
cos(2*PI()*(index() sin(2*PI()*(index()
- -
1)/WINDOW_MAX(INDEX())) 1)/WINDOW_MAX(INDEX()))
5、将字段x拖至列功能区,去y字段拖至行功能区 右击x字段,计算依据-->id(数据桶) 右击y字段,计算依据-->id(数据桶)
标记功能区选择图形为:多边形
得到下图:
6、将标记功能区的 id(数据桶) 拖至路径,我们得到一个圆球 注意:这里是多边形做的,不是用饼图或圆点图
思考:我们希望得到一个扇形,目前是一个饼图,如果将开始位置和结束位置的点都放在圆心,那会怎么样呢
6、我们对字段x和字段y做一些修改:
x字段:IIF(INDEX() = 1 or INDEX() = WINDOW_MAX(INDEX()), 0,
cos(2*PI()*(index() - 1)/WINDOW_MAX(INDEX()))) y字段:IIF(INDEX() = 1 or INDEX() = WINDOW_MAX(INDEX()), 0,
sin(2*PI()*(index() - 1)/WINDOW_MAX(INDEX())))
得到下图: