Nebula:构建交互联动的图形语法(Nebula: A Coordinating Grammar of Graphics)

在多视图联动的可视化系统(MCV)中,不同视图会根据用户在其他视图中的交互和联动更新其内容。交互式创作系统(Interactive systems)提供直接的操作来创建视图之间的交互,但仅限于一定类型的预定义模板;基于文本的规范语法(Textual specification languages)支持灵活的交互创作,但对用户的技术水平有较高要求。本文提出一种基于自然语言的语法,用以创建多视图联动可视化的框架Nebula。该框架通过演示实例来描述视图联动效果,如图1所示。

图1:MCV的实例。

Nebula将视图联动形式化为在源视图由用户触发的交互,和目标视图中由联动触发的“虚拟”交互,以及实现联动过程中可能需要的数据转换,来保证实现联动的过程中的数据一致性,如图2所示。其中,用户触发的交互形式化为<type> <target> in <view>, 联动触发的交互形式化为<type> <target> in <view> with <parameter>,type,target,view分别对应图1中蓝色,红色,绿色的文字部分。

图2:Nebula的流程概览。

为了总结常用的交互类型,即上述<type>的选项,作者回顾了176个现有的可视化系统,并将它们分为七类。Select:指定感兴趣的元素(如数据项、区间);Filter:排除指定元素;Navigate:改变视图的视点和尺度(如平移、缩放、旋转等);Encode:更改元素的视觉编码(如颜色、大小、形状);Set:修改可视化的配置(如替换、修改数据);Reconfigure:更改可视化的空间排列(如排序、拖动等);Append:在不覆盖旧数据的情况下添加数据。如图3所示,Select和Set是最常用的交互。

图3:176个可视化的交互功能统计

因此,所有one-to-one的联动类型组合有7×7种。 在作者统计的176个可视化中,包括其中的26种组合。如图3所示, Select → Select 和 Select → Set 是最常见的联动组合。

在很多视图联动的情况下,源视图和目标视图数据是不一致的,需要进行相应的数据转换,如子集、合并、过滤和交集。此外,还有聚类和降维等算法也需要数据转换。数据转换的操作可以抽象为 <type>→when <trigger>, <name> with<parameter> 。其中 <parameter> 字段与上述联动触发的交互是相同的,用于指定转换的数据源,这些数据源主要来自源视图中预加载的数据集等。“$”是表示一个数据映射,例如图4(A)中,Transformation中的“$1”对应于“select items in scatterplot1”对应的数据。Destination中的“$1”对应于Transformation 的计算结果 。

图4: Nebula 的流程和结构

为了实现外部工具包的可视化联动,Nebula通过Reactive layer将联动构造与交互设计解耦。 Nebula 采用Model-View-ViewModel ( MVVM )的结构。Reactive layer通过 Streaming data 在数据转换模块和视图模块间通信,承担 ViewModel 的职责。数据转化模块类似于 MVVM 中的 Model 。当源视图接受到交互时, Streaming data 的数据就会相应改变,触发多视图的联动。

图5 由Set → Append的联动交互实例
图6 复杂系统的联动交互实例

本文通过不同可视化案例来展示Nebula的表现力(如图5、图6所示),并通过认知研究的分析评估 Nebula 的可用性。本文提供了一种可视化联动交互的高层次抽象方法,实现可视化设计和交互构建的解耦,支持独立改变交互类型和数据转换的部分。这些结果能够促进可视化的交互设计理论、推荐模型或其他联动交互应用的开发。

参考文献

[1] R. Chen et al., “Nebula: A Coordinating Grammar of Graphics,” in IEEE Transactions on Visualization and Computer Graphics, doi: 10.1109/TVCG.2021.3076222.

发表评论?

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>