散点图的动态透明度优化(Dynamic Opacity Optimization for Scatter Plots)

这是一篇简短而有趣的文章,作者是来自AutoDesk Research的Justin Matejka,Fraser Anderson和George Fitzmaurice,发表于CHI 2015 [1]。文章试图解决一个常见而棘手的问题:当散点图的数据量过大时,数据的重叠会引起严重的视觉遮挡,影响用户对数据结构和分布的理解。比如图一这种情况,我们已经很难从散点图上看出数据分布的特征。
解决这种视觉拥挤或者说过度渲染的方法主要有以下几种方法:降低数据规模,减小数据点尺寸,改变数据点形状,移除填充色,使用半透明色。使用半透明色是实践中最主要和有效的手段,但透明的选择需要用户的经验进行反复调节,当有很多散点图并行展示时(比如散点图矩阵),用户设置就会显得单调而低效。因此作者希望通过搜集一系列的用户设置数据,寻找一个简单的模型来描述数据特征和渲染透明度的关系,进而能够自动调整散点图的渲染透明度。

图一:当数据规模足够大时,我们很难从散点图上看出数据的分布特征。

图一:当数据规模足够大时,我们很难从散点图上看出数据的分布特征

数据收集

他们设计了一组27个散点图,每个散点图随机包含1~273个高斯分布的点,代表不同拥挤程度的数据。每位被试需要给每个散点图选择一个不透明度来达到最佳的视觉效果。为了横向比较不同的数据结构,他们选择高斯分布时又设置了3种不同的方差。为了描述数据的拥挤度,他们定义重叠度参数为:重叠度 = 散点数*每个点的像素面积/图像的像素面积

图二:重叠度参数

图二:重叠度参数

通过整理所有的用户数据,他们发现散点图的不透明度和重叠图呈反比关系:

图三:随着重叠度的增加,散点图的不透明度降低

图三:随着重叠度的增加,散点图的不透明度降低

这很容易理解,但我们要寻找一种映射关系来描述这条曲线。回忆数据拟合的方法,我们通常要对y做一定的变换,使x和变换后的y尽量形成线性关系,进而发现x和y之间的函数映射。作者也是通过尝试计算散点图的各种属性来观察它和重叠度的关系,最后发现了一种神奇的度量值:平均有效不透明度(Mean Opacity of Utilized Pixels,MOUP) = 所有像素点的不透明度/不透明度大于0的有效像素数。不论重叠度怎么改变,这个度量值都稳定在40%左右。

图四:重叠度和有效像素不透明度的关系

图四:重叠度和平均有效不透明度的关系

算法描述

综合以上结果,我们只需要寻找散点图的不透明度和平均有效不透明度的关系就行了。对于一个像素点的不透明度,我们假设有l个点覆盖,那么我们有下面的递推公式:

图五:不透明度递推公式

图五:不透明度递推公式

因此, 对于P个点组成的散点图,我们可以这么计算平均有效不透明度:

图六:平均有效不透明度计算方法

图六:平均有效不透明度计算方法

因此我们的目标就是寻找最佳的不透明度α,使得MOUP(P, α)=0.4。观察图五的公式可以发现,Of(l,α)正比于alphal,l是正整数,0<=alpha<=1,因此该函数是单调下降的,进而MOUP(P, α)也是单调下降的,所以我们可以用二分法来寻找最优解。

除了上述的公式,我们发现,在重叠度小于0.5的时候,用户倾向于给散点图设置更高的不透明度。我们需要对这部分结果进行修正。作者统计了一下,αuser与αMOUP_0.4之间的差值符合对数分布,因此添加了一个对数修正系数:

图七:对数修正系数

图七:对数修正系数

只要让图六公式算出的α乘上上述修正系数即可。

结果分析

图八展示了模型的计算结果(黑实线)与用户选择结果(红色分布图)的比较,我们可以看出结果拟合的很好。虚线部分是没有进行系数修正的结果,可以看出在重叠度比较低的时候,用户倾向于给散点图设置更高的不透明度。

图七:模型结果和用户选择的比较

图八:模型结果和用户选择的比较

作者进一步拿一组真实的数据进行计算,得到的渲染效果如下:

图九:真实的数据

图九:真实的数据

其中D2相对于我们在图一中展示的效果,可以明显看出数据的分布和结构。他们把自动计算的不透明度和用户手动选择的结果相比较,也得到了非常高准确度的吻合。因此,该算法是一种简单高效的解决散点图视觉拥挤的方法。

讨论

这篇文章通过用户经验数据收集、数据分析、模型假设、算法设计、校验测试的方式创造了一种稳健易用的算法来解决散点图渲染面临的大数据视觉重叠问题,整篇文章短小精悍,一气呵成,算法简洁明快,令人印象深刻。虽然没有提出新的设计,但解决问题的条理和步骤值得我们借鉴。发现平均有效不透明度这个不变量令人拍案,虽然现在我还没有想清楚这个40%和人的视觉、心理学有什么关联,但这个数字绝对不会是凭空出现的,希望能有相关领域的老师、同学来研究和分析。视觉拥挤是绝大部分可视化形式都会遇到的问题,平行坐标轴、树图、集合图、社交网络图,本文的方法是否也可以迁移到这些上面来呢?如果数据包含多个类别,我们赋予不同的色相,该算法是否继续有效呢?我想,这些都会是比较有趣的研究方向。

参考文献

[1] Justin Matejka, Fraser Anderson & George Fitzmaurice. //Dynamic Opacity Optimization for Scatter Plots//. in Proc. ACM SIGCHI, 2015: 2707-2710

评论关闭。