优化推断通道类型的方法
#4486
Replies: 1 comment 2 replies
-
如果初始 data 为空,然后网络请求回来之后,再设置数据呢? mark.encode('color', { type: 'field', value: 'a' }); 这种是一直支持的吧? |
Beta Was this translation helpful? Give feedback.
2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
优化推断通道类型的方法
目前在 G2 中一共有三种类型的通道:
当用户通过
mark.encode
去指定通道值的时候,G2 内部会根据这值去推断通道的类型。当指定的值是
number
,boolean
或者function
的时候通道类型是没有歧义的,前两者都是 constant,而后者是 transform。但是如果指定的值是string
的时候就存在歧义了:可能是 field 通道,也可能是 constant 通道。针对上面的情况,有两种思路:
是否为字段
第一种思路是 G2 目前采用的使用:判断第一条数据是否有该字段。
这样比较简单,但当数据有缺失的时候,就会出问题了。(参考这个 issue:https://github.com/antvis/G2/issues/4437 )
针对这种情况,要么就是显示声明通道类型,要么就是判断所有数据。
这里觉得第二种解决办法好一点:如果数据没有缺失,没有性能损失;如果数据有缺失,性能损失也不大。
是否为颜色
Plot 里面就采用的是判断这个字符串是否为颜色:
如果 value 既是字段,又是颜色,那么会被认为是颜色。如果希望是字段需要如下去声明:
同时还需要判断这个 value 是不是形状。
结论
因为判断是否为颜色和形状会相对复杂一点,所以这里建议就判断是否为字段,只不过修改判断方法如下:
Beta Was this translation helpful? Give feedback.
All reactions