该图显示了一个双向列联表,其数据大致如下:
Branded Unbranded Social Referring Direct RSS
First-time... 177276 472737 88638 265915 472737 59092
Return Visits... 236002 629339 118001 354003 629339 78667
4+ Visits in ... 166514 444037 83257 249771 444037 55505
10+ Visit in ... 28782 76751 14391 43172 76751 9594
At Least One Visit... 6707 17886 3354 10061 17886 2236
Last Touch... 660 1759 330 989 1759 220
有无数种方法可以构建这个情节。 例如,您可以计算每个矩形色块的位置,并单独绘制每个色块。不过,总的来说,它有助于找到关于绘图如何表示数据的简洁描述。
作为出发点,我们可以将其视为堆叠条形图的变体。
这个情节几乎不需要描述:通过熟悉我们知道每一行矩形对应于列联表的每一行;矩形的长度与它们的数量成正比;它们不重叠;并且颜色对应于表格的列。
如果我们把这张表转换成“数据框”或“数据表”X每个计数有一行,字段指示行名、列名和计数,然后绘制它通常相当于调用合适的函数并规定在哪里可以找到行名、列名和计数。使用图形实现语法ggplot2
(包R
)这看起来像
ggplot(X, aes(Outcome, Count, fill=Referral)) + geom_col()
图形的细节,例如一排条的宽度和使用什么颜色,通常需要明确规定。如何做到这一点取决于绘图环境(因此兴趣相对较小:您只需查找它)。
图形语法的这种特殊实现在定位条形方面几乎没有灵活性。 以最小的努力产生所需外观的一种方法是在每个条的底部插入一个不可见的类别,以使条居中。 稍微思考一下,将每个条居中所需的假计数必须是条的总长度和最长条的平均值。对于此示例,这将是一个包含值的初始列
254478.0 0.0 301115.0 897955.0 993610.5 1019817.0
这是生成的堆积条形图,以浅灰色显示虚假数据:
通过使假列的图形不可见来创建所需的图形:
该图的图形语法描述不需要更改:我们只是提供了一个不同的列联表以根据相同的描述进行渲染(并覆盖了假列的默认颜色分配)。
评论
这些图形是真实的:每个色块的水平范围与基础数据成正比,没有失真。将它们与原版(在问题中)进行比较,可以看出它的失真有多极端(Tufte 的谎言因子)。
如果希望在“漏斗”底部显示详细信息,请考虑按面积而不是长度表示计数。您可以使条的长度与总长度的平方根成正比,它们的宽度(在垂直方向上)也与平方根成正比。现在“漏斗”的底部大约是最长长度的二十分之一,而不是它的四十分之一,从而可以显示一些细节。不幸的是,该ggplot2
实现不允许将变量映射到条形宽度,因此需要更复杂的解决方法(确实单独描述每个矩形的解决方法)。也许有一个更灵活的 Python 实现。
参考
Edward Tufte,定量信息的视觉显示。柴郡出版社 1984 年。
Leland Wilkinson,图形的语法。 斯普林格 2005.