这次我计划用三篇文章来介绍用Tableau制作3D模型的方法,分为入门篇、提高篇和进阶篇。
今天我们先来入门,学习一下双轴旋转的3D模型制作方法。
相信很多接触过Tableau的同学都看过Noah Salvaterra的3D特斯拉模型。当我第一次看到这个Viz的时候佩服的五体投地,自己也特别想做一个,奈何对原理完全摸不着头脑,也就放弃了。
https://public.tableau.com/profile/nsalvate#!/vizhome/TableauTesla/TableauTesla
最近发现Public上的3D模型多了起来,也就又激起了自己的研究欲望,找了几篇国外大神的文章,钻研了几天,终于小有收获,自己也实验成功。
确实是前人栽树后人乘凉,特别要感谢那些无私奉献的大神们。
在Tableau中开3D模型之先河的应该是Bora Beran,一位低调的数学大神。他的开创性工作,让人受益匪浅。大家可以下载他的Viz,研究一下,我的文章也以此为依据进行讲解。
Bora Beran的博客:
https://boraberan.wordpress.com/2015/12/18/going-3d-with-tableau/
Bora Beran的3D模型下载:
https://public.tableau.com/profile/bora.beran#!/vizhome/3DChartsinTableau/CaffeineMolecule
关于数学原理
3D坐标系转换成平面坐标系的数学原理,我找了一些资料和近似的公式,说实话,我完全搞不懂,当然也没必要搞懂,踏着大神的足迹前进就可以了。
构造数据集
我们从画一个最简单的长方形开始。
假设这个长方形的长=2,宽=1,高=1,这样8个顶点的x、y、z坐标就确定了。
id,x,y,z
1,0,0,0
2,0,1,0
3,0,1,1
4,0,0,1
5,2,0,0
6,2,1,0
7,2,1,1
8,2,0,1
创建计算字段
- 创建维度XZ - Angle (Radians)
- 创建维度YZ - Angle (Radians)
这里先从最简单的双轴旋转开始,只建立两个参数作为旋转轴。参数的范围可以自己再调整。
-
x_rotated=[x]*COS([XZ - Angle (Radians)])+[z]*SIN([XZ - Angle (Radians)])
-
z_rotated=-[x]*SIN([XZ - Angle (Radians)])+[z]*COS([XZ - Angle (Radians)])
-
y_rotated=[z_rotated]*SIN([YZ - Angle (Radians)])+[y]*COS([YZ - Angle (Radians)])
创建图形
- 将[x_rotated]拖到行功能区,[y_rotated]拖到列功能区
- 将[id]拖到标记栏“详细信息”和“标签”
- 这里最好固定x轴和y轴(-3和3之间)
这时就可以调整参数来变换角度了。
对于只有点的数据来说,非常的简单,只要知道坐标就可以,但是如果需要把点之间连线,该怎么做呢?
增加连线
上面的数据集就不能满足要求了,需要更改数据集。这和做网络关系图有点类似,两点确定一条直线,长方形有12条边,就需要24行数据。
group,id,x,y,z
1-2,1,0,0,0
1-2,2,0,1,0
1-4,1,0,0,0
1-4,4,0,0,1
1-5,1,0,0,0
1-5,5,2,0,0
2-3,2,0,1,0
2-3,3,0,1,1
2-6,2,0,1,0
2-6,6,2,1,0
3-4,3,0,1,1
3-4,4,0,0,1
3-7,3,0,1,1
3-7,7,2,1,1
4-8,4,0,0,1
4-8,8,2,0,1
5-6,5,2,0,0
5-6,6,2,1,0
5-8,5,2,0,0
5-8,8,2,0,1
6-7,6,2,1,0
6-7,7,2,1,1
7-8,7,2,1,1
7-8,8,2,0,1
- 我们可以直接将上面做好的工作表数据替换成新的数据集。
- 将新的[group]字段拖到详细信息。
- 复制[x_rotated]字段,做双轴并同步轴。
- 将[id]字段拖到标记栏“路径”里,类型改为“线”。
至此大功告成,快去自己试验一下吧。
此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下
网友评论