《数据可视化基础》处理重叠的点的问题
以下部分是基于《Fundamentals of Data Visualization》学习笔记,要是有兴趣的话,可以直接看原版书籍:https://serialmentor.com/dataviz/
当我们想要可视化大型或非常大型的数据集时,我们经常会遇到这样的挑战,即简单的x - y散点图也不能很好地进行可视化,因为许多点是相互叠加的,甚至有一些是部分或完全重叠。通常用于描述这种情况的技术术语是绘制重叠图,也就是说,将许多点绘制在彼此之上。在这里,介绍了几种可以采取的策略。
部分透明和抖动
我们首先考虑一个数据点数量适中但四舍五入较多的情况。我们使用一个包含1999-2008公布的234款流行车型在驾驶期间消耗的燃油和其发动机排量的数据。在这个数据集当中,消耗的燃油以每加仑英里数(mpg)来衡量,发动机排量以升为单位。其数据都进行了四舍五入的处理。由于进行了四舍五入,许多车型的值完全相同。例如,在21辆2.0升排量的汽车当中,它们只有四种不同的燃油经济性值,19、20、21或22 mpg。因此,在下图中,这21辆车仅用4个不同的点来表示,因此2.0升发动机看起来比它们实际的流行程度要低得多。此外,数据集包含两辆2.0升发动机的四轮驱动汽车,用黑点表示。然而,这些黑点完全被黄点遮挡,所以它看起来好像没有四轮驱动汽车与2.0升发动机。
改善这个问题的一个方法是使用部分透明。如果我们使单个点变成部分透明,那么绘制重叠的点的时候颜色显示就会变暗,因此这些点的阴影反映了图中该位置点的有重叠。
然而,使时点部分透明并不总是足以解决重叠的问题。例如,尽管在👆,我们可以看到有些点的阴影比其他点的深,但很难估计每个位置上有多少点重叠在一起。此外,虽然在阴影的差异是明显可见的,但是他们并没有进行额外的说明。第一次看到这个图的读者可能会想知道为什么有些点比其他点暗,并且不会意识到这些点实际上是多个点叠加在一起。在这种情况下,一个简单的技巧是对这些点应用少量的抖动,也就是说,在x方向或y方向或两者方向上随机地移动每个点。使用抖动,可以立即明显地看出,较暗的区域来自于绘制在彼此之上的点(👇)。现在,代表四轮驱动汽车2.0升引擎的黑点第一次清晰可见。
抖动的一个缺点是它确实会更改数据,因此必须小心执行。如果我们抖动太多,最终会将点放置在不能代表底层数据集的位置。其结果是数据的可视化的图形会对结果解读产生误导。例如下图,
2D 直方图
当我们数据量特别大的时候,部分透明(有没有抖动)将不足以解决覆盖的问题。这个时候,如果使用部分透明的情况的话,就会出现点密度高的区域会出现均匀的黑色斑点,而在点密度低的区域,单个点几乎不可见。例如👇,显示了超过100,000个航班的起飞延误,每个点代表一个航班起飞。即使我们已使各个点相当透明,但它们仍在0-300分钟之间形成了一个黑色带。这个黑色带会掩盖大多数航班是准时起飞还是实质性延误
在这种情况下,我们可以制作一个2D直方图,而不是绘制单个点。2D直方图和之前介绍过的1D直方图类似。只不过我们把数据放到了一个二维空间里面了。我们把整个xy平面细分成小矩形,计算每个小矩形中有多少个观测值,然后根据这个数字给矩形着色。例如👇,就比👆的清楚很多了。
除了将数据变成矩形外,我们还可以将数据变成六边形。其优点是彩色六边形比彩色矩形稍微更准确地表示数据。
等高线
另外,除了使用2D直方图,我们还可以使用等高线这样的东西,绘制数据在不同位置的点密度。
👇左图显示了123只蓝鸟的头长与体质量的关系,各点之间存在一定的重叠。我们可以通过使点更小,部分透明,以及添加等高线来表示其密度分布的方式来进行更好的可视化。
我们可以进一步增强对点密度变化的感知,方法是对等高线所包围的区域进行阴影处理,对代表较高点密度的区域使用较深的颜色。
另外我们之前还研究过雄性和雌性鸟类头部长度和体重之间的关系。对于等高线,我们也可以这样做,分别为雄性和雌性绘制不同颜色的等高线(图18.10)。
用不同颜色绘制多组等高线是来绘制多组分布的很好的方法。但是需要注意的是,只有当具有鲜明颜色的组的数量很少(2到3个)并且组被清楚地分开时,它才有效。否则,我们可能会变成一个由不同颜色的线交织成团,没有任何特定的图案。
为了说明这个潜在的问题,使用钻石数据集,其中包含53,940颗钻石的信息,包括它们的价格、重量(克拉)和切割量。👇将这个数据集显示为散点图。我们看到了过这个图形有一个明显的问题:有如此多的不同颜色的点在另一个之上,它是不可能辨别任何东西。
这里如果基于不同的分组把等高线绘制在同一个图形上的话,就会出现上面提到的问题。
相反,我们基于不同的分组绘制不同的等高线则会看起来更简单明了一些。