简介
什么是交互?一种允许用户选择如何展示数据不同侧面的技术。
用户为什么要进行交互?
- 数据太多,没办法一次性展现出来
- 在图表上仅展示了数据的一部分信息,需要查看详情
用户的行为会触发图表的各种交互,在定义交互语法时需要对用户行为进行更深的分析,包括:
- 用户行为的目的
- 实现用户目的的方式
- 行为过程中的反馈
用户行为目的
用户在图表上的所有操作都有其目的,无目的的操作不需要考虑,也尽量避免收到无目的操作的影响,由于图表本质上是展示数据的,所以用户行为的目的都是针对数据的,可以分为:
- 数据探索
- 查看记录的详情
- 查看数据整体和局部
- 同时对比多个数据源的数据
- 查找
- 查看记录的详情
- 数据操作
- 调整数据顺序
- 更新数据(增、删、改)
- 调整数据顺序
目前在图表的上的操作主要关注在数据探索,数据操作目前并没有真正的支持。
实现方式
我们分析用户行为目的的实现方式时考虑:
- 触发机制
- 信息的展示方式
- 关联的图形元素
- 反馈方式
查看记录的详情
查看记录详情可以分成三个场景:
- 查看单条记录信息
- 查看多条记录信息
- 对数据进行下钻
查看记录的详情可以有几种方式:
- 通过 tooltip 显示详细信息
- 触发:鼠标在画布上移动
- 信息的展示方式:详情信息跟随鼠标移动
- 关联的图形元素:数据对应的图形
- 反馈方式:
- tooltip 跟随鼠标移动
- tooltip 信息更新
- 数据关联的图形处于 actived 状态
- tooltip 跟随鼠标移动
- 触发:鼠标在画布上移动
- 通过其他 DOM 元素
- 触发:鼠标移动到图形上 、 点击选中图形、框选图形
- 信息展示方式:通过旁边的表格或者列表显示详情
- 关联的图形元素:数据对应的图形
- 反馈:
- DOM 内容更新
- 数据关联的图形处于 actived/selected 状态
- DOM 内容更新
- 触发:鼠标移动到图形上 、 点击选中图形、框选图形
- 通过其他图表显示详情
- 触发:鼠标移动到图形上 、点击选中图形、框选图形
- 信息展示方式:在其他的图表上展示详情
- 关联的图形元素:数据对应的图形
- 反馈:
- 图表更新
- 数据关联的图形处于 actived/selected 状态
- 图表更新
- 触发:鼠标移动到图形上 、点击选中图形、框选图形
- 直接在当前图表显示详情
- 触发:点击图形
- 信息的展示方式:在当前图表刷新
- 关联的图形:点击的图形
- 反馈
- 图表更新,显示详情
- 图表更新,显示详情
- 触发:点击图形
- 在坐标轴上显示坐标对应的数据
- 触发:鼠标移动
- 信息的展示方式:显示十字线、在坐标轴上显示对应的数值
- 关联的图形元素:无
- 反馈:
- 十字线跟着鼠标移动
- 信息不断更新
- 十字线跟着鼠标移动
- 触发:鼠标移动
- 在图例上显示对应图形的信息
- 触发:鼠标移动到图形上
- 信息的展示方式:在图例上高亮对应的选项或者数值
- 关联的图形:移动到的图形
- 反馈:
- 图形高亮
- 图例项高亮、在图例上显示具体的值
- 图形高亮
- 触发:鼠标移动到图形上
查看数据整体和局部
整体和局部是相对的,当数据量比较大时,一般的可视化策略是 overview first, detail on demand。但是在处理整体和局部时有多种方式,但是基本的操作都是:
- Zoom : 缩放,缩放可以细分为几何缩放和语义缩放
- 几何缩放:画布和图形同时进行缩放,图形会同时放大、缩小
- 语义缩放:图形大小不变,画布展示范围变化
- 几何缩放:画布和图形同时进行缩放,图形会同时放大、缩小
- Filter : 过滤
整体和局部的切换注意:可恢复性
体现在用户操作上可以有以下多种方式:
- 使用缩略图
- 触发:鼠标在缩略图上拖拽或者点击
- 信息的展示方式:在缩略图上有所有的图形
- 关联的图形:所有图形都会受影响
- 反馈:画布移动,仅显示视窗内的图形
- 触发:鼠标在缩略图上拖拽或者点击
- 使用滑块(slider)
- 触发:鼠标拖拽滑块或者点击
- 信息的展示方式:在滑动条的背景上显示整体
- 关联的图形:all
- 反馈:触发过滤,显示过滤完成后的图形
- 触发:鼠标拖拽滑块或者点击
- 使用框选框过滤
- 触发:鼠标框选指定区域(双击回复)
- 信息的展示方式:鼠标移动过程中会出现框选框
- 关联的图形:被框选的图形
- 反馈:
- 触发过滤,仅显示被框选的图形
- 触发过滤,仅显示被框选的图形
- 触发:鼠标框选指定区域(双击回复)
- 使用图例
- 触发:鼠标移动到图例选项上,或者点击图例项
- 信息的展示方式:高亮或者触发过滤
- 关联的图形:同图例项相关的图形
- 反馈:
- 鼠标移动触发图形高亮
- 点击触发筛选
- 鼠标移动触发图形高亮
- 触发:鼠标移动到图例选项上,或者点击图例项
- 拖动画布/鼠标滚轮/手势
- 触发:在画布上进行拖拽、缩放操作
- 信息的展示:在旁边显示缩放度、显示滑动条
- 关联的图形:所有
- 反馈:
- 画布移动、缩放
- 画布移动、缩放
- 触发:在画布上进行拖拽、缩放操作
使用缩放按钮缩放画布
同步显示 tooltip
- 触发:在其中一个图表上移动鼠标
- 信息展示:各个图表上都在对应的位置显示 tooltip
- 关联的图形:tooltip 关联的图形
- 反馈:
- tooltip 同 x 轴的位置同步
- tooltip 内容更新
- tooltip 同 x 轴的位置同步
- 触发:在其中一个图表上移动鼠标
- 同时框选选中/过滤
- 触发:在其中一个图表上框选
- 信息展示:所有图表上显示框选框
- 关联的图形:被框选的图形
- 反馈:
- 选中的图形高亮
- 选中的图形范围过滤
- 选中的图形高亮
- 触发:在其中一个图表上框选
多表联动显示相关信息
通过外部输入框查找
- 触发:在外部输入框输入文本
- 信息展示:无
- 关联的图形:匹配的图形
- 反馈:
- 关联的图形高亮
- 或者触发过滤
- 关联的图形高亮
- 触发:在外部输入框输入文本
- 在图例上进行查找
- 触发:在图例上的的查找框输入文本
- 信息展示:图例项显示或者隐藏
- 关联的图形:同依然显示图例项关联的图形
- 反馈:
- 图形过滤,没有匹配的图形隐藏
- 图形过滤,没有匹配的图形隐藏
- 触发:在图例上的的查找框输入文本
展开折叠节点,通过树形结构进行查找
柱状图、饼图的从大到小排布
- treemap 中值最大的项排在中间还是开始
- 层叠区域图的层叠顺序
- 对数据进行分组显示
对数据进行排序,目前可以看到的场景基本都是通过两种方式来实现:按钮触发或者拖拽的方式
- 使用外部排序按钮
- 触发:点击按钮
- 信息展示:展示排序的字段、排序方式
- 关联的图形:所有
- 反馈
- 数据排序后重新刷新
- 数据排序后重新刷新
- 触发:点击按钮
- 使用坐标轴的标题排序
- 触发:点击坐标轴标题
- 信息展示:切换排序的图标
- 关联的图形:所有
- 反馈
- 图形根据数据顺序重排
- 图形根据数据顺序重排
- 触发:点击坐标轴标题
拖拽重排序
重新加载数据,图表刷新
- 用户在图表上操作,导致数据变化
这里主要关注第二种,用户在图表上的操作导致的数据更新
- 点击添加数据
- 触发:点击画布
- 信息展示:无
- 关联的图形:新增的图形
- 反馈:点击的位置增加图形,数据源中增加数据
- 触发:点击画布
- 点击删除数据
- 触发:点击图形
- 信息展示:删除提示
- 关联的图形:点击的图形
- 反馈:图形移除、数据源中的数据移除
- 触发:点击图形
- 点击按钮删除数据
- 触发:框选图形后点击按钮
- 信息展示:删除提示
- 关联的图形:选中的图形
- 反馈:图形移除、数据源中的数据移除
- 触发:框选图形后点击按钮
- 点击更新数据
- 触发:点击/框选图形,
- 信息展示:显示编辑面板
- 关联的图形:选中的图形
- 反馈:数据更新,图形刷新
- 触发:点击/框选图形,
- 拖拽移除数据
- 触发:将图形拖动出画布,然后释放
- 信息展示:删除提示
- 关联的图形:拖动的图形
- 反馈:图形移除、数据源中的数据移除
- 触发:将图形拖动出画布,然后释放
- 拖拽合并数据
- 触发:将一个图形拖拽到另一个图形上面
- 信息展示:合并提示(是否可释放)
- 关联的图形:拖拽的图形、释放时激活的图形
- 反馈:数据更新(删除、更新),图形刷新
- 触发:将一个图形拖拽到另一个图形上面
- 拖拽改变数据集
- 触发:将一个图形拖动到另一个图表上
- 信息展示:
- 关联的图形:拖动的图形
- 反馈:
- 一个数据集删除数据,
- 另一个新增数据,
- 图表刷新
- 一个数据集删除数据,
- 触发:将一个图形拖动到另一个图表上
更多
上面通过用户行为的目的梳理了一些常见的交互,从前面对业务支持的经验来看,基本能够满足需求,我们接下来的工作是细化这些交互行为,抽离出触发事件、中间过程反馈和交互结果,同时在不同的场景去校验。最终形成一套完整的交互语法。