用Tableau画小提琴图

2020-06-05  本文已影响0人  扫地sir

小提琴图 (Violin Plot)是用来展示多组数据的分布状态以及概率密度。这种图表结合了箱形图和密度图的特征,主要用来显示数据的分布形状。跟箱形图类似,但是在密度层面展示更好。在数据量非常大不方便一个一个展示的时候小提琴图特别适用。

箱线图是Tableau中自带的图形,但要实现小提琴图就有点难度了。Gwilym提供了一种方法,通过绘制多边形来实现。大家可以看一下他的文章,里面有详细的思路和实现步骤(包括试错的过程),讲述的非常详细。

博客地址:
http://w2h.cc/ODAxO
Public地址:https://public.tableau.com/profile/gwilym#!/vizhome/HowtocreateviolinplotsinTableau/0_plotsamples

下面我就根据Gwilym的方法,教大家自制一个小提琴图。原理都略过,只取干货。

创建数据集

Sample ID,Sample Value,Group
1,6.2,male
2,5.1,male
3,1.9,male
4,-0.4,male
5,-1.3,male
6,-2.1,male
1,5.2,female
2,4.1,female
3,0.9,female
4,-1.4,female
5,-2.3,female
6,-3.1,female

数据集沿用Gwilym文章里的,为了增加一点点难度,我增加了一列Group。

x
0
1
2
……
97
98
99

辅助表就是一个0-99,步长为1的等差数列。

内联接两张数据表。

创建计算字段

这里要说一下,以上这两个参数,要根据数据集的不同自行调整,如果数据值很大,那么上面的值相应变大,需要多尝试。曲线的平滑度是用bandwidth来控制。

IF [x] = 0 THEN {MIN([Sample Value])} - [X scaling factor]
ELSEIF [x] = 1 THEN {MIN([Sample Value])} - [X scaling factor]
ELSEIF [x] = 99 THEN {MAX([Sample Value])} + [X scaling factor]
ELSE 
    ({MIN([Sample Value])} - [X scaling factor]) +     
    (
    ABS(
        ({MAX([Sample Value])}+[X scaling factor]) - ({MIN([Sample Value])}-[X scaling factor]) 
    )
        * (([x]-1)/97)
    )
END
IF [Group]="male" then
    (IF [x] = 0 THEN 0
    ELSEIF [x] = 99 THEN 0
    ELSE 
    1/({COUNTD([Sample ID])}*[bandwidth])
    *
    (1/(SQRT(2*PI()))) * EXP(-0.5  * (
    ([X] - [Sample Value])^2)/[bandwidth])
    END)
END
IF [Group]="female" then
    (IF [x] = 0 THEN 0
    ELSEIF [x] = 99 THEN 0
    ELSE 
    1/({COUNTD([Sample ID])}*[bandwidth])
    *
    (1/(SQRT(2*PI()))) * EXP(-0.5  * (
    ([X] - [Sample Value])^2)/[bandwidth])
    END)
END

这里为了区别男女,多加了一个Y2,如果没有分组的需要,只用一个Y1,并去掉IF [Group]这个判断就可以了。

创建视图

上面介绍的是Gwilym的方法,另外我尝试了一下不用辅助表,只用原始数据,制作并集,并创建数据桶的方式来制作,但是这样做增加了一些额外的表计算步骤,难度加大了一些,就不给大家介绍了。

如果有兴趣,可以下载我按照数据桶方式做好的Viz,自行研究学习。

https://public.tableau.com/profile/jiangbin#!/vizhome/violin_15913432542690/1

此篇文章已发布到我的公众号:saodisir,有兴趣也可关注一下

上一篇下一篇

猜你喜欢

热点阅读