该图显示了一个双向列联表,其数据大致如下:
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的Lie Factor)。
如果希望在“渠道”的底部显示详细信息,请考虑用 面积而不是长度来。您可以使钢筋的长度与总长度的平方根成正比,而钢筋的宽度(垂直方向)也与平方根成正比。现在,“漏斗”的底部大约是最长长度的二十分之一,而不是最长的四分之一,从而可以显示一些细节。不幸的是,该ggplot2
实现不允许人们将变量映射到条形宽度,因此需要更复杂的解决方法(确实可以单独描述每个矩形)。也许有一个更灵活的Python实现。
参考文献
爱德华·塔夫特 定量信息的可视化显示。柴郡出版社1984年。
莱兰·威尔金森(Leland Wilkinson),《图形语法》。 施普林格2005年。