美文网首页
用Tableau画小提琴图

用Tableau画小提琴图

作者: 扫地sir | 来源:发表于2020-06-05 15:53 被阅读0次

    小提琴图 (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的等差数列。

    内联接两张数据表。

    创建计算字段

    • 创建参数X scaling factor,浮点值,默认值5。
    • 创建参数bandwidth,浮点值,默认值2.25。

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

    • X-axis
    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
    
    • Y1
    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
    
    • Y2
    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]这个判断就可以了。

    创建视图

    • 将[X-axis]拖到行功能区。

    • 将[Y2]拖到列功能区,增加负号,变成-SUM([Y1])。

    • 将[Y1]拖到[Y2]的右侧。

    • 标记类型选择“多边形”,[x]拖到路径上。

    • 调整一下[Y1]和[Y2]的颜色,区分出男女。

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

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

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

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

    相关文章

      网友评论

          本文标题:用Tableau画小提琴图

          本文链接:https://www.haomeiwen.com/subject/rwpazhtx.html