2021SC@SDUSC“F2移动端可视化方案”源码分析(八)——Interaction交互机制的分析

2021SC@SDUSC 

目录

简介

使用方法

        引入交互模块

        调用

        清楚交互动作

饼状图的选中 

       使用

        API

        参数说明

柱状图的选中

        使用

        API

         参数说明

 图表平移

         使用

        API

        参数说明

图表的缩放

         

        使用

         API

        参数说明


简介

        F2提供了一套交互机制,用以达到通用的交互行为的封装和复用。经过代码分析和搜索论证后,暂时总结出以下四种通用的交互行为:

                1.饼状图的选中

                2.柱状图的选中

                3.图表平移

                4.图表缩放

        基于以上四种交互行为,我们可以在使用F2的时候,借用此机制来封装自己定义的交互行为。当然,要使用自己定义的自定义交互行为的方法并不在此文章中说明。

使用方法

        引入交互模块

        交互模块在F2中是默认没有被打包至 @antv/f2 模块包中的。所以在使用时需要我们手动引入,以下提供一种比较通用的引入代码段:

// 首先引入 F2
const F2 = require('@antv/f2/lib/index');

// 引入所有的交互行为
require('@antv/f2/lib/interaction/');

// 如果只需要引入其中一种交互行为,那么请使用如下的方式
// 引入 pie-select
require('@antv/f2/lib/interaction/pie-select');

// 引入 interval-select
require('@antv/f2/lib/interaction/interval-select');

// 引入 pan
require('@antv/f2/lib/interaction/pan');

// 引入 pinch
require('@antv/f2/lib/interaction/pinch');

        调用

        经过分析后,在此文中提供一种调用方法,代码段如下:

chart.interaction('name', config);

        这里的 ‘name’ 是指我们定义的 interaction 的名字。

        清楚交互动作

chart.clearInteraction()       
chart.clearInteraction('name') 

        第一种清除交互动作的方式是:清除 chart 实例上所具有的所有的交互动作;

        第二种清除交互动作的方式是:清除 chart 实例上名字为 ‘name’ 的交互动作。

饼状图的选中 

        

 动图来自AntV f2官方展示图片

       使用

        以下为调用代码段:

// 调用
chart.interaction('pie-select');

这里的 pie-select 是F2中的保留字,即我们要尽量在自定义变量中不去使用这个名字。

        API

chart.interaction('pie-select', {
  startEvent: {String}, // 触发事件,默认为 tap
  animate: {Boolean} || {Object}, // 动画配置
  offset: {Number}, // 光环偏移距离
  appendRadius: {Number}, // 光环大小
  style: {Object}, // 光环的样式配置
  cancelable: {Boolean}, // 是否允许取消选中,默认值为 true,表示允许
  onStart: {Function}, // 事件触发后的回调
  onEnd: {Function}, // 事件结束后的回调
  defaultSelected: {Object} // 设置默认选中的数据,该属性需要在 chart.render() 之后调用方可生效
});

        参数说明

参数类型默认值说明
startEventString‘tap’

此交互原则上是手指点击后触发的,所以还可以使用 ‘touchstart’。

选中交互的出发时间名称。

animateBoolean/Objectfalse

动画配置,默认为 false ,可将该属性设置为 true 以打开动画。

类型为 Object 时,用于动画配置,详见上一篇文章。

offsetNumber1选中后出现的光环与饼图之间的距离。
appendRadiusNumber8选中后出现的光环的轴长。
styleObject{ fillOpacity:0.5 }设置光环的样式。
cancelableBooleantrue选中后是否可取消选中,默认为 true ,即可以再次点击以实现取消选中。
onStartFunctionnull

事件触发后的回调,会调用设定的 Function 函数。

onStart( ev ) {}

onEndFunctionnull事件结束后的回调,会调用设定的Function函数,进行相应操作。
defaultSelectedObjectnull用于设置初始化默认选中的数据,只需要传入我们选择的对应数据即可。

柱状图的选中

         

 动图来自AntV f2官方展示图片

        使用

        以下为调用代码段:

// 调用,尽量在 chart.render() 方法之后调用
chart.interaction('interval-select', {});

        API

chart.interaction('interval-select', {
  startEvent: {String}, // 触发事件,默认为 tap 事件
  selectStyle: {Object}, // 被选中图形的样式配置
  unSelectStyle: {Object}, // 未被选中图形的样式配置
  selectAxis: {Boolean}, // 是否高亮坐标轴文本
  selectAxisStyle: {Object}, // 坐标轴文本被选中后的样式
  cancelable: {Boolean}, // 是否允许取消选中,默认值为 true,表示允许
  onStart: {Function}, // 事件触发后的回调
  onEnd: {Function}, // 事件结束后的回调
  mode: {String}, // 选中策略,默认为 'shape', 即击中柱子才会触发交互
  defaultSelected: {Object} // 设置默认选中的数据,该属性需要在 chart.render() 之后调用方可生效
});

         参数说明

参数类型默认值说明
startEventString‘tap’

此交互原则上是手指点击后触发的,所以还可以使用 ‘touchstart’。

选中交互的出发时间名称。

selectStyleObject{ fillOpacity:1 }用于设置被选中的柱的显示样式
unSelectStyleObject{ fillOpacity:0.4 }用于设置未被选中的柱的显示样式
selectAxisBooleantrue是否为高亮的坐标轴文本,默认是,如不需要可自行选择关闭。
selectAxisStyleObject{ fontWeight:‘bold’ }设置坐标轴文本高亮的样式。默认仅有文本加粗,可自行添加删减。
cancelableBooleantrue选中后是否可取消选中,默认为 true ,即可以再次点击以实现取消选中。
onStartFunctionnull

事件触发后的回调,会调用设定的 Function 函数。

onStart( ev ) {}

onEndFunctionnull事件结束后的回调,会调用设定的Function函数,进行相应操作。
modeString‘shape’选中策略:默认值使得触摸到柱才会触发交互;另有可选值 'range' ,使得触摸位置落在柱的一定x方向范围内都会触发交互。
defaultSelectedObjectnull用于设置初始化默认选中的数据,只需要传入我们选择的对应数据即可。

 图表平移

        

动图来自AntV f2官方展示图片 

         使用

        以下是调用此交互动作的代码段:

// 调用,需要在 chart.render() 方法之前调用
chart.interaction('pan');

        API

chart.interaction('pan', {
  mode: {String}, // 图表平移的方向,默认为 'x'
  speed: {number}, // 用于控制分类类型或者 TimeCat 类型数据的平移速度
  step: {number}, // 用于控制分类类型或者 TimeCat 类型数据每次平移的数据条数
  panThreshold: {Number}, // hammer.js 设置,用于设置触发 pan 事件的最小移动距离
  pressThreshold: {Number}, // hammer.js 设置,用于设置触发 press 事件的设置
  pressTime: {Number}, // hammer.js 设置,用于设置触发 press 事件的最小时间差
  limitRange: {Object}, // 限制范围
  onStart: {Function}, // 事件触发后的回调
  onProcess: {Function}, // 事件进行中的回调
  onEnd: {Function} // 事件结束后的回调
});

        参数说明

参数类型默认值说明
modeString‘x'图表平移方向,可设置 x 轴、y 轴以及 x、y 两个方向的平移( ’xy‘ )。
speedNumber5

平移速度,数值越大,速度越快,

仅适用于分类类型 'cat' 或者时间类型 'timeCat' 数据。

stepNumber1控制每次平移的位移量,仅适用于分类类型 'cat' 或者时间类型 'timeCat' 数据。
panThresholdNumber10识别 pan 即平移事件的最小移动距离。
pressThresholdNumber9识别 press 即点击事件的最小移动距离。
pressTimeNumber251识别 press 事件的最小时间差,长按会触发 tooltip。这一点跟之前文章里面分析过的机制类似。
limitRangeObject{}设置图表平移的最大最小范围。
onStartFunctionnull

事件触发后的回调,会调用设定的 Function 函数。

onStart( ev ) {}

onProcessFunctionnull

事件进行中的回调,会调用设定的Function函数。

onProcess( ev ) {}

onEndFunctionnull事件结束后的回调,会调用设定的Function函数,进行相应操作。

图表的缩放

         

 动图来自AntV f2官方展示图片 

        使用

        以下为调用代码段:

// 调用,需要在 chart.render() 方法之前调用
chart.interaction('pinch');

         API

chart.interaction('pinch', {
  mode: {String}, // 图表平移的方向,默认为 'x'
  sensitivity: {Number}, // 用于控制分类类型数据的缩放灵敏度
  minScale: {Number}, // 缩小的最小倍数
  maxScale: {Number}, // 放大的最大倍数
  onStart: {Function}, // 事件触发后的回调
  onProcess: {Function}, // 事件进行中的回调
  onEnd: {Function}, // 事件结束后的回调
  pressThreshold: 9, // hammer.js 设置,用于设置触发 press 事件的设置
  pressTime: 251 // hammer.js 设置,用于设置触发 press 事件的最小时间差
});

        参数说明

参数类型默认值说明
modeString‘x'图表平移方向,可设置 x 轴、y 轴以及 x、y 两个方向的缩放( ’xy‘ )。
sensitivityNumber1控制缩放灵敏度,越小越灵敏,仅适用于分类类型 'cat' 或者时间类型 'timeCat' 数据。
minScaleNumber

linear:null

分类类型、TimeCat:1

设置图表缩放的最小倍数。
maxScaleNumber

linear:null

分类类型、TimeCat:4

设置图标放大的最大倍数。
onStartFunctionnull

事件触发后的回调,会调用设定的 Function 函数。

onStart( ev ) {}

onProcessFunctionnull

事件进行中的回调,会调用设定的Function函数。

onProcess( ev ) {}

onEndFunctionnull事件结束后的回调,会调用设定的Function函数,进行相应操作。
pressThresholdNumber9识别 press 即点击事件的最小移动距离。
pressTimeNumber251识别 press 事件的最小时间差,长按会触发 tooltip。这一点跟之前文章里面分析过的机制类似。

        本文所涉及到的内容完全根据 F2 在 gitHub 中开放的源码分析所得,其中可能会有很多信息并不完整,因此在使用方面还需要进一步搜索查证试验之后再使用更好。

        同时,随着分析工作的推进,文章内容与动画机制越来越没关系,之所以有这样的情况,是因为我们在分析源码的过程中,会自然而然地发现动画机制的代码并不是孤立的存在(其他部分亦然)因此在分析过程中,我们会将所涉及到的一些感觉有必要的代码进行分析。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是利用 Matlab 编写双因素方差分析并包含交互项的代码: 首先,我们需要准备数据。在这里,我们假设我们有一个包含两个自变量和一个因变量的数据集。这里我们用一个例子数据集来进行演示。 ``` % 生成数据 x1 = [1 1 1 2 2 2 3 3 3]'; x2 = [1 2 3 1 2 3 1 2 3]'; y = [1.5 1.7 1.9 2.0 2.2 2.4 3.0 3.2 3.4]'; ``` 接下来,我们需要计算变量的均值和总均值。 ``` % 计算均值 x1_mean = mean(x1); x2_mean = mean(x2); y_mean = mean(y); total_mean = mean(y); ``` 然后,我们需要计算组间方差和组内方差。 ``` % 计算组间方差(between-group variance)和组内方差(within-group variance) SS_total = sum((y - total_mean).^2); SS_between_x1 = sum(3 * (mean(y(x1==1)) - total_mean).^2) + sum(3 * (mean(y(x1==2)) - total_mean).^2) + sum(3 * (mean(y(x1==3)) - total_mean).^2); SS_between_x2 = sum(3 * (mean(y(x2==1)) - total_mean).^2) + sum(3 * (mean(y(x2==2)) - total_mean).^2) + sum(3 * (mean(y(x2==3)) - total_mean).^2); SS_interaction = SS_total - SS_between_x1 - SS_between_x2 - sum((y - mean(y(x1==1 & x2==1)) - mean(y(x1==1 & x2==2)) - mean(y(x1==1 & x2==3)) - mean(y(x1==2 & x2==1)) - mean(y(x1==2 & x2==2)) - mean(y(x1==2 & x2==3)) - mean(y(x1==3 & x2==1)) - mean(y(x1==3 & x2==2)) - mean(y(x1==3 & x2==3))).^2); SS_within = SS_total - SS_between_x1 - SS_between_x2 - SS_interaction; df_between_x1 = 3 - 1; df_between_x2 = 3 - 1; df_interaction = (3 - 1) * (3 - 1); df_within = 3 * 3 - 3; MS_between_x1 = SS_between_x1 / df_between_x1; MS_between_x2 = SS_between_x2 / df_between_x2; MS_interaction = SS_interaction / df_interaction; MS_within = SS_within / df_within; F_x1 = MS_between_x1 / MS_within; F_x2 = MS_between_x2 / MS_within; F_interaction = MS_interaction / MS_within; ``` 最后,我们可以使用F检验进行假设检验。 ``` % F检验 p_x1 = 1 - fcdf(F_x1, df_between_x1, df_within); p_x2 = 1 - fcdf(F_x2, df_between_x2, df_within); p_interaction = 1 - fcdf(F_interaction, df_interaction, df_within); ``` 以上代码实现了双因素方差分析并包含交互项,可以根据不同的数据集进行修改和调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值