Tableau教程 - 经典图例之Nightingales Rose(玫瑰图)

更新时间:2024-01-26 23:37:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

小白并非此图的原创,该图来源于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())))

得到下图:

小结:

我们的到了一个接近圆形的,扇形,当然,角度边小一些更清楚的看到是扇形

继续思考:

练习1解决了维度均匀分区的问题, 练习2解决多边形扇形问题

如果将扇形多边形放在每个分区里,问题是否可以得到解决

正式开始制作玫瑰图:

数据源准备,使用脚本生成数据:在附件中

1、打开Tableau Desktop,选择SQL SERVER,选择自定义SQL,输入上面的脚本;2、在工作表界面,右键path,创建,数据桶;

3、创建计算字段 Count 内容:index()

index 内容:index() Edges 内容:index() 是为了定义计算级别

4、创建计算字段Angle, 内容:([Edges]-1)*(2*PI()/WINDOW_MAX([Edges]))

类似于练习1的功能,取得每个分区的开始弧度

5、创建计算字段Radius,内容为:AVG([sales]),是为了求得每个分区半径的 6、创建计算字段Number of Slices,内容WINDOW_MAX([Count]) 注:个人对这个地方不是很理解 7、分别创建计算字段X,Y

IIF([Index]=1 OR [Index]=WINDOW_MAX([Index]),0, WINDOW_MAX([Radius]) * COS([Angle]+

((([Index]-2)*WINDOW_MAX(2*PI())/([Number of Slices]*99)))))

IIF([Index]=1 OR [Index]=WINDOW_MAX([Index]),0, WINDOW_MAX([Radius]) * SIN([Angle]+

((([Index]-2)*WINDOW_MAX(2*PI())/([Number of Slices]*99)))))

基本思想,从中心点出发,最后回到中心点,那这个扇形将会被平均分为多少个等分,是99个

①举例:假设index总共有5个点, 1与5在中心点,2与4两个弧的边角,中间只有4,也就是弧度被分为2等分

5-3=2 102-3=99

((([Index]-2)*WINDOW_MAX(2*PI())/([Number of Slices]*99))))

② 上面弧度加 + 分区开始弧度 = ((([Index]-2)*WINDOW_MAX(2*PI())/([Number of Slices]*99)))) + [Angle]

8、标记功能区选择图形为多边形

9、将X字段拖至行功能区,将Y字段拖至列功能区, Date拖至标记功能区,右击-->月,然后拖至颜色

path(数据图)拖至标记功能区-->路径 (确保 显示缺省值) 10、右击行功能区中X字段,编辑表计算-->根据以下因素计算-->高级 分区: Date月

寻址:path(桶)

然后点击确定,回到上一个界面点击应用,!!!!!一定要点击应用,这里不要退出

11、计算字段是有下拉列表的

index: 根据以下因素计算:path(数据桶) Angle:

根据以下因素计算:Date 所在级别:Date 月 重新启动间隔:无 Edges:

根据以下因素计算:Date 所在级别:Date 月 重新启动间隔:无 Count:

根据以下因素计算:Date 所在级别:Date 月 重新启动间隔:无

Number of Slices:

根据以下因素计算:高级 分区:空

寻址:Date 月 path(数据桶)

12、对Y字段做同样的设置,你的图应该可以看到

假设你的图没有看到,那你也别问我,都写恶心啦

本文来源:https://www.bwwdw.com/article/hssw.html

Top