本文介绍了Tableau中如何把箱形图和单位直方图分离。
Steve Wexler在他最近的一篇博客文章《Is this better than a Jitterplot? Could be》中探索了可视化jitterplot图(带有随机jitter的点图,jitter用来区分点)的替代方法:
博客文章链接:
https://www.datarevelations.com/betterthanjitterplot.html
在本文中,我将展示如何创建与单位直方图(unit histogram)区分的箱形图(box plot)。
译者注:jitter是一个随机值,分配给点用来将其区分,这样就不会重叠了,详细内容可以参见下面这篇文章:
Methods for Creating Jitter in Tableau:
https://www.dataplusscience.com/TableauJitter.html
单位直方图
史蒂夫在他的帖子以及另一篇文章”Tableau visualization is here“中描述了如何制作单位直方图:
Tableau visualization is here:
https://public.tableau.com/profile/swexler
我将用它作为此文章的起点,因此如果您想跟着练习,请在此处下载他的workbook:
下载链接:
https://public.tableau.com/workbooks/DataRevelations_MeVsOthers_UnitHistogram.twb
这是史蒂夫做的单位直方图:
删除分步带(distribution bands)并添加箱形图
下载并打开Steve的Tableau workbook后,右键单击主仪表板选项卡“Salary Comparison Jitterplot Dashboard(2)”并选择“Unhide All Sheets”。
转到名为Breakout with Quartiles的工作表。单击分布带中的线并将其拖离Tableau Canvas。另一种方法是右键单击该线并选择“删除”。对分步带也重复此步骤。您现在应该得到了一个没有分布带的单位直方图。
单击左上角的“分析”选项卡。单击并将箱形图拖动到Tableau canvas并将其放在SUM(continuous Bin)上。这将为单位直方图添加一个箱形图。
这很简单,但请注意,箱形图的中心位于窗格中并覆盖了一些点。
让我们探讨一些将箱形图移开的办法。
改变箱形图的位置
第一种方法是通过创建更多点来移动箱形图。我们将通过创建另一个胶囊(pill)并使用双轴来实现这一目标:
双击INDEX() 胶囊右侧白色区域的Column Shelf。这将允许您输入行内公式。输入-20并按Enter键。
右键单击新胶囊并选择“Dual Axis”。右键单击图表顶部的新二级X轴,然后选择“Synchronize Axis”。
在SUM(-20)的标记卡上,单击颜色并将不透明度设置为0%,将边框设置为“None”。
您现在应该得到了一个单位直方图,它从箱形图的中心开始。
但是,您会注意到许多点仍然隐藏在箱形图的后面。您可以将X轴更改为固定以调整位置,但我认为很难以不与点重叠并能显示所有点的方式固定箱形图的位置。
将箱形图与单位直方图分开
分离箱形图和点图的最明显方法是为每个箱形图和单位直方图创建工作表。在本例中,有四代,所以将有八个工作表。这种方法允许您为每一代创建一个不同的视图,一个带有箱形图,另一个带有单位直方图,并且可以非常直接地复制整个工作表并相应地调整过滤器以创建每个视图。但这并不是一个好办法,当你有更多类别时,很快就会变得笨拙。
另一种分离它们的方法是复制数据。这可以使用自定义SQL,Tableau Prep,Alteryx或在原始数据源中预处理来完成。为了便于演示,您可以在此处下载重复的数据:
下载链接:
https://www.dataplusscience.com/files/BoxandUnitHisto.xlsx
此电子表格只是简单地复制原始数据并带有一个名为“Column”的新列。第一组数据在此新列中具有值“box”,第二组数据具有值“dots”。
从顶部菜单中选择“Data”,然后选择“New Data Source”。
选择“Microsoft Excel”并选择您下载的文件"BoxandUnitHisto.xlsx"。这将打开新的数据源。
再次单击"Breakout with quartiles"选项卡来返回Tableau canvas。再次从顶部菜单中选择“Data”,然后选择“Replace Data Source”。
“Current:”数据源应设置为"Reshaped Survey Data",“Replacement:”数据源应设置为"Sheet1(BoxandUnitHisto)"。
这将使用复制了所有记录的新数据源替换原来的单个数据源,并具有一个名为“Column”的新字段。
复制数据集的一个大问题是计算可能会受到影响。例如,Continuous Bin,它是Y轴上的主要字段,现在已经翻倍了。有很多方法可以解决这个问题,但是我们将对此进行简单的修复,即将数字除以2。注意这可能不是所有情况下的最佳解决方案:
右键单击Continuous Bin并将/ 2添加到公式中,以便该值除以2。
在Breakdown之后将Column胶囊拖到Column shelf上。向上拖动SUM(-20)离开canvas以删除胶囊或右键单击并选择“Remove”。
右键单击Continuous Bin并选择“Duplicate”
右键单击新字段Continuous胶囊(copy)并选择“Edit”
调整公式:IF [Column] ='box' then INT([Value] / [Bin Size])* [Bin Size] / 2 ELSE null END
将新的Continuous胶囊(copy)拖动到“Continuous Bin”旁边的Rows shelf
右键单击Continuous胶囊(copy)并选择“Dual Axis”
右键单击右侧的新二级Y轴,然后选择“Synchronize Axis”
将Dots窗格中的箱形图从Tableau Canvas中拖出以将其删除,或者右键单击Dots窗格中的箱形图并选择“Remove”
现在,您将拥有一个仅在标有“box”的左窗格窗口中的箱形图,而不是标记为“dots”的第二个窗格。让点在“box”窗格中消失有点棘手。我想你会发现不透明度,颜色,边框和尺寸在此刻都不起作用。所以我们将创建另外两个字段来处理这个问题:
计算字段:Col Num
公式:IF [Column] ='box' THEN 0 ELSE 1 END
计算字段:Count
公式:IF avg([Col Num])= 0 THEN null ELSE index()END
使用新字段Count替换Column shelf上的INDEX()
右键单击Column shelf上的Count,然后选择“Compute Using”并将其设置为“Resp ID”
您现在应该在第一个列窗格中有一个箱形图,在第二个列窗格中有一个单位直方图。其余的只是根据需要进行格式化:
在图表区域中单击鼠标右键,然后选择“Format”
选择“Borders”并将“Column Divider Level:”向左滑动一个位置。
右键在二级Y轴的Continuous胶囊(copy)点击并取消选中“Show Header”以删除
右键单击带有“box”和“dots”的列标题,然后取消选中“Show Header”以删除
根据需要调整点的颜色。
复制数据肯定会有缺点,但是,这里的最终结果是一个不与单位直方图重叠的箱形图,并且与在点的顶部绘制的典型箱形图相比具有一些优点。这种方法也可以用于分布带。只需用分布带替换箱形图窗格。
这也可以与jitterplot一起使用,但我发现单位直方图比使用jitter随机放置点更有用。
我希望这篇文章对您有所帮助。如果您有任何问题,请随时给我发电子邮件Jeff@DataPlusScience.com