用Tableau画Sigmoid Bump Chart

一直特别喜欢曲线图,所以一直特别喜欢研究怎么画曲线图,Sigmoid Bump Chart我看国外大神也有叫Smooth Bump Chart(平滑凹凸图),其实就是用画桑基图的Sigmoid曲线来画Bump Chart图。

来比较一下,同样的数据,你喜欢哪种图呢?

Bump Chart
Sigmoid Bump Chart

Bump Chart的画法很简单,网上文章很多,大家可以自行搜索。

下面我们来研究一下Sigmoid Bump Chart的制作方法。首先,需要复习前面两篇文章,用Tableau画桑基图-方法一(表计算)和用Tableau画桑基图-方法二(联接表),原理在方法一里讲过了,我们用方法二的联接表的形式来做。

数据准备,百度链接: https://pan.baidu.com/s/1uZD2Rfy1a2FC0gE77HdE1Q 提取码: afw6

一共两个表,“数据排名表”是历年每种颜色车型的受欢迎程度的排名,“path联接表”用来创建笛卡尔积数据。

Tableau引入数据,通过link字段内联接两张表

内联接两张表

新建一组字段

【T】=([Path]-25)/4

【Sigmoid】=1/(1+EXP(1)^-[T])

如果你看过前面的文章,就会知道这两个字段是用来建立sigmoid曲线图的

再建第二组字段

【Rank 1】=[Rank]

【Rank 2】=IFNULL(WINDOW_MIN([Rank 2 Setup]),MIN([Rank]))

【Rank 2 Setup】=IF MIN([Path]) = 49 THEN LOOKUP(MIN([Rank]),1) END

【Curve】=MIN([Rank 1])+(([Rank 2] - MIN([Rank 1]))*MIN([Sigmoid]))

与前面的文章有一定不同,需要四个字段来确定曲线的高度和起始点,【Rank 2 Setup】的作用是找到下一年的rank排名,比如other这个颜色,2000年排名第三,2001年排名第六,如果你有心去看表计算的结果【Rank 2 Setup】取到了6这个值,【Rank 2】利用【Rank 2 Setup】取到的值,填满了2000年的49行数据。

other
表计算结果

如果你理解了前面的两篇文章,你就会知道现在如果画曲线,都是堆叠在一起的,我们接下来要做的就是把所有曲线,横向拉开(桑基图是纵向拉开),为此要建立一组字段

【Year Order】=[Year] - {MIN([Year])}

这个字段的作用是把年转换成0,1,2,3这样等比数列,就是相较于2000年差了几年

【Path Order】=(49*[Year Order])+[Path] (要转换成维度-连续)

这个字段的作用,就是把曲线全部横向拉开了,2000年是1-49,2001年就是50-98,以此类推

【YearFake】=([PathOrder]/49) + 2000 (要转换成维度-连续)

其实有了【Path Order】就可以建立好Sigmoid Bump Chart了,【YearFake】就是为了直接让轴显示年份

下面就可以建立视图了

把【YearFake】拖到列功能区(【Path Order】也是可以的,可以自己试一下),【Curve】拖到行功能区,【color】拖的标签-颜色,【Year】拖到详细信息,按照下面调整【Curve】的表计算,注意重启间隔的设置,并编辑【Curve】的轴为倒序

rank2
rank2 setup

差不多就是这个效果了

效果

剩下的就是新建一个字段,用来做突出显示年份的圆点

【DualUp】=FLOAT(MIN(IF [Path]=1 THEN [Rank] END))

这个字段就是只显示每年的第一个点,其他点不显示

将【DualUp】拖入行功能区,然后双轴,调整【DualUp】的轴为倒序

最终效果

然后就是美化工作了。

给大家这个Viz的public地址,大家可以下载自行研究一下,他是做了两个双轴https://public.tableau.com/profile/rody.zakovich#!/vizhome/TheUntanglingofColorPopularityamongNewCarsinNorthAmerica/TheUntanglingofColorPopularityforNewCars

大神的原效果

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

你可能感兴趣的:(用Tableau画Sigmoid Bump Chart)