基于像素的可视化技术的理论与应用(Designing Pixel-Oriented Visualization Techniques: Theory and Applications)

可视化大规模的高维数据在数据分析中扮演着越来越重要的角色。在众多的技术中,基于像素的可视化是一类非常有效的可视化方法。基于像素的可视化方法是在将对象的每一个数据属性映射到有限的屏幕空间内的一个像素点上,从而可视化尽可能多的可视化数据对象,并且通过排列像素点体现出数据中所存在的模式。近些年来,基于像素的可视化技术在很多具体场景中得到了广泛的应用并且充分验证了方法的有效性。本文的主要目的是讨论基于像素的可视化技术中的常见问题,对于设计该类可视化方法提供理论依据,本文所采用的方法是将基于像素的可视化技术中的设计转换为约束条件,求解约束条件进而得到设计决策,本文发现基于求解约束所得到的设计决策能够得到高效的可视化设计方法。

图1将多维数据可视化技术从可视化技术,可视化变形,交互技术三个方面正交地进行划分,可视化技术分为几何(Geometric),基于图标的技术(Icon-based),基于像素的技术(pixel-oriented),(层次结构)(hierarchical),基于图(graph-based);交互技术主要有映射(mapping),投影(projection),过滤(filtering),缩放(zoom)等等;可视化变形分为简单变形(simple)以及复杂变形(complex)。针对多种多样的可视化方法,人们通常思考是否这些技术只是一些花俏或者特别的想法呢?他们是否存在一些理论依据呢?设计可视化是否存在系统的方法呢?如果存在的话,那么是否他们都对应着一些明确的设计目标呢?本文主要从基于像素的可视化技术的角度来回答上述的问题。

图1. 高维数据可视化技术

本文主要介绍设计基于像素的可视化的四个方面,(1)数据属性与像素颜色之间的映射关系,(2)窗口中的像素排布,(3)窗口的形状,(4)窗口的排列顺序。除此之外,本文也讨论了采用基于像素的技术可视化大规模空间高维数据的设计问题。

基于像素的可视化技术首先将屏幕空间按照维度进行划分(维度数量对应空间划分的数量),如图2所示,改图中的可视化按照维度数量将屏幕空间划分为六个部分,其次将每一个数据属性映射到子区域的一个像素上,其中每一个子区域对应数据的一个维度。图3从比较了基于像素的可视化技术与其他的高维数据可视化技术。结果显示基于像素的可视化方法在可视化高维数据以及大规模的数据方面更有优势,同时该技术不会导致视觉元素之间的重叠现象。但是该类方法的缺点是不适用于显示类别型的属性,同时对于普通用户的学习曲线比较陡峭。

图2. 基于像素的可视化技术

图3. 基于像素的可视化技术与其他技术的比较

基于像素的可视化设计

本文从以下四个方面介绍基于像素的可视化设计问题,主要的方法是将具体的设计目标转换为约束方法,然后求解约束既可以得到目标的基于像素的可视化形式。实现一个具体的基于像素的可视化设计需要考虑以下四个方面。对于基于像素的可视化方法,对于每一个像素点,需要决定的有两类视觉属性,第一个是颜色,第二个是像素对应的横纵坐标位置。然后多个像素点构成一个窗口,需要考虑窗口的形状,以及不同窗口之间位置的排布关系。

数据属性与像素颜色之间的映射

使用颜色映射数据属性值是指将将一个数据属性值的分布映射到颜色空间上。基于像素的可视化方法所针对的是大量的高维维数据,因此这些数值型的数据属性的范围较大,从而需要将数据属性映射到尽可能大的颜色空间中。相比彩色的灰度颜色空间,彩色的颜色空间所占据的动态范围更大,因此基于像素的可视化方法采用基于像素的可视化设计。

在颜色空间中,颜色的亮度是识别颜色的最重要属性。当颜色映射数值型属性时,需要数值的大小与颜色的亮度相对应,因此本文的目标即找到一个亮度值单调变化的颜色空间,现有的颜色空间有RGB,HSV,HLS等等,然而如图4所示,这些颜色空间所对应的亮度值并不是线性变化的,本文提出了HSI的颜色空间,能够保证亮度值线性变化的约束。

窗口中像素的排列

第二个需要考虑的方面是像素的排布问题,不同颜色的像素排布在一起从而显示出数据属性值中存在的规律。假设需要排布n个数据对象,每一个数据对象包含k的数据属性,在一个窗口中,本文需要排布数据对象的所有数据属性值,因此本文将问题装换为一个双射约束,最小化如下约束的数值。约束的含义是指在二维的排布中尽可能地保持两点在一维空间的中距离。

如何将一维的序列映射到二维的空间是长期以来一直研究的问题,经典的方法包括Hilbert曲线,moton曲线。Hilbert曲线能够很好地保持数据中的聚集特征,但是人的注意却很难追随具体的曲线,因此用户难以建立不同的窗口之间的对应关系。相比较Hilbert曲线,Morton曲线更容易追踪,但是节点之间的具体就不能很好地保持。

图4. Hilbert曲线与Morton曲线的排布以及布局结果

本文提出了递归排布模式方法,该方法首先将像素以小集合为单位进行展示,然后将小集合不断组织成大的集合,从而保留在小集合中的具体模式。以时间序列为例,即首先将时间序列按照“天”进行组织构成最小的单元,然后按照“周”构成“天”的集合,进一步构成“月”或者“年”的集合。

图5. 递归排布的可视化技术

针对大量的的高维数据,即使将数据属性映射到一个像素值上,仍然无法将全部数据进行可视化,因此在屏幕空间中需要依据用户的查询进行显示,根据用户查询结果得到对象序列之后,只显示与用户查询相关的结果。但是使用上述的排布方式却会将与用户查询结果最相符的数据对象排布在屏幕空间的边角上。因此本文提出了螺旋的排布方式从而将最相关的数据对象排布在屏幕空间的中心位置。使用传统的螺旋排布方式, 如图6(左)会将相邻的数据元素在一维上展开排布,如果数据元素中存在聚集的现象,在所得到的可视化中无法体现,因此本文提出了普适的螺旋排布方式,如图6(中)和6(右),通过在一个小的范围内进行折叠的方法能够更容易发现数据对象的聚集现象,如图7(右) 所示。

图6. 左:普通的螺旋排布方式;中&右:广义的螺旋排布方式.

图7:左: 普适的螺旋排布方式的可视化结果;右:广义的螺旋排布方式的可视化结果

窗口的形状

在确定了像素在一个窗口内部的排布方式之后,下一步即需要决定窗口的形状,使用上述的矩形的方式进行排布,相邻的窗口之间的位置会比较大,为了减小窗口之间的距离,本文提出了扇形的窗口形状。该方法创建基于像素的可视化形式的方法是将圆形按照维度数量进行划分(图8),扇形的数量对应维度的数量,在一个扇形内部沿着与径向垂直的方向来回进行排布,如图9所示。

图8:扇形的窗口性状

图9:在扇形形状中排布像素

窗口的位置

在决定了每一个窗口中像素的排布模式之后,第四个方面是进一步确定窗口的排布顺序,从而体现出在不同的属性值之间的相关性或者异常值等模式。决定窗口的位置需分为一维以及二维,一维是指仅仅决定窗口的排布顺序,二维是同时考虑窗口的排布顺序以及窗口内部的元素之间的排布顺序。一维的排布也进一步划分为一维线性排布以及环形排布,在线性排布中不需要考虑始末的两个窗口之间的关系,而在环形窗口排布中需要同时将始末窗口之间的关系考虑在内。二维的排布方式需要考虑窗口之间的像素相似关系以及窗口内部的像素之间的相似度。如图10(左)所示为优化之前窗口排布方式得到的结果,图10(右)为优化窗口排布方式之后的结果。

图10:优化窗口中像素排布方式结果

基于像素值的地理相关的可视化形式

不同于上述的基于像素的数据可视化形式,地理相关的数据具有其自身的位置对应着其本身的地理属性,因此在使用基于像素的可视化形式时,无法使用上述的排布方式决定像素的位置,而应该遵循其本身的地理属性。但是地理相关的多维数据存在的问题是首先一个数据对象的多个属性值会映射到相同的屏幕空间位置中,第二不同的数据对象也会映射到相同的屏幕空间位置中,从而会导致屏幕中出现重叠的现象,本文提出了三种如下不同的可视化方法解决像素重叠的问题:(a)最近邻的算法;(b)沿curve曲线的最近邻算法;(c)Gridfit的算法;最近邻的算法是指首先定位到重叠的像素,然后将重叠的像素重新排列到其最近的位置上没有被填充的位置处;基于curve的最近邻算法是将重现的元素沿着curve移动到最近的没有被填充的像素位置上;Gridfit的算法是指按照四叉树的方法对于屏幕空间进行重新划分,不同的屏幕空间由在屏幕中的数据属性值进行填充,调整的标准是直至每一个分配的空间中的数据属性不会出现重叠的现象。

(a)最近邻的算法(nearest-neighbor算法);(b)基于曲线的算法;

(c)网格填充算法

本文针对基于像素的数据可视化形式,主要研究了设计像素的可视化理论基础,首先将基于像素的可视化的设计划分为四个方面,数据属性与像素的颜色映射关系,窗口内部像素的排布,窗口的性状以及窗口的排布顺序,将每一个方法的设计都转换为最优化问题,求解最优化问题既可以得到最终的可视化形式。除此之外,本文讨论了基于像素值的地理相关的可视化的设计方法,该方法的特点在于每一个数据对象本身有空间属性,并且会不同的数据对象之间会发生重叠的现象,为了解决像素之间重叠的问题,本文提出了最近邻算法,基于曲线的排布算法,以及网格填充排布算法。

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>