当我讨论应对过度绘制的技巧时,我省略了 (至少) 一个流行的 “解决方案”: 抖动数据。抖动是向数据点添加随机噪声的过程,以便在绘制它们时,它们不太可能占据相同的空间。当绘制的数据是离散的时,它最常用。在这种情况下,在没有抖动的情况下,不仅仅是数据点标记的边缘重叠,标记实际上完全位于彼此的顶部。数据点大小的任何减少都无法消除此问题。
虽然抖动可能会被添加到例如箱形图中的点,但它最常用于2D散点图。下图中的图表A显示了一个人为设计的示例数据集,没有尝试处理过度绘图。x和y变量都只取整数值。数据集实际上包含2000个点,但只有780个独特的点。图表B示出了相同的数据,但是增加了抖动。具体地,对于每个点,从-0.5和0.5之间的连续均匀分布中抽取的随机数被添加到x坐标,并且从相同分布中抽取的另一个随机数也被添加到y坐标。如前所述,另一个潜在的解决方案是使点半透明 (图表C),当然,这两个选项可以组合 (图表D)。
从这些情节中可以得出什么结论?因为只有780唯一的值对,所以1220 (61%) 数据点在图表A中被完全遮蔽。随着抖动的增加,每个点变得唯一,但是仍然存在用于表示它们的点的一定程度的重叠。使点半透明肯定有助于表明有超过780个点可见,但它并不总是一个可接受的选择。
因为半透明和其他替代方案,例如2D直方图,并不总是可以接受的解决方案,所以可能值得考虑抖动数据可能会出现哪些其他问题。一个关键问题可能是完整性。如果我们将点从它们的 “真实” 位置移开,我们是否故意扭曲数据?虽然上面的图表A似乎是绘制数据的更 “正确” 的方式,但图表B更擅长显示大多数数据的大致位置。在图表A中,所有的点都在正确的位置,但它们并不都同样代表数据的分布; 一个可见的点可以标记1到12个数据点的位置。没有半透明或颜色或其他东西,就无法知道哪个是哪个。
尽管如此,我想再次指出,你应该考虑你的观众。例如,他们会被非整数值所混淆吗?在一个维度上不再处于允许范围内的极端点呢?
我认为也值得研究一些真实世界的数据,如果你一直在阅读我的其他文章,这些数据看起来很熟悉。下面的GIF显示了来自8位png图像的RGB图像数据的2D直方图 (可以在此处找到精确的细节和从中提取的图像)。随着动画的进行,绘制抖动值的均匀分布的长度 (“抖动程度”) 在两个维度上都会增加。在这里,抖动的使用确实允许我们查看有关哪个值对最频繁出现的更多详细信息。因为数据保持在正方形块中,所以仍然存在在底层数据中仅存在适度数量的离散值的感觉。
在上一篇文章中,我还研究了相同初始图像的低质量和高质量jpeg的蓝色和绿色值的分布。下面的GIF显示了添加抖动的效果。除了溢出轴范围之外的点 (如果没有别的,这看起来很奇怪),随着抖动因子的增加,两个散点图之间的明显差异会消失。这是非常不可取的。
与数据可视化中的许多事情一样,对于 “我应该抖动数据点吗?” 这个简单的问题没有明确的答案。抖动可以帮助澄清大部分数据的位置,但它也可能扭曲重要的模式。在适当的情况下,我更喜欢使用半透明,但有时-例如,当点的颜色已经告诉我们一些重要的事情时-这不是一个选项。
通过Infragistics WPF强大的数据可视化功能,为生活带来大量复杂信息!立即下载免费试用版!
</p