假设我有一个像这样的对象数组:
[{xVal: 9.7, yVal: 100},
{xVal: 12.3, yVal: 40},
{xVal: 12.4, yVal: 60}, ...]
我想过滤它并显着减小其大小以用于散点图中。我一直在尝试一些事情,但对正确的做法以及API文档有些困惑。据我了解,过滤器堆栈,所以我尝试了这个:
let xDim: Dimension<ITest, number> = cf.dimension((d: ITest) => d.xVal)
let yDim: Dimension<ITest, number> = cf.dimension((d: ITest) => d.yVal)
yDim.filterRange([40, 80])
let xDimGrouped: any = xDim.group((d: number) => Math.round(d))
我的意图是最终基于x和y进行分组,同时也能够对其进行过滤。在上面的代码中,对过滤器进行分组后会立即将其忽略({xDim.top(3)
会返回过滤后的数组)。
要按两个值分组,我已经尝试过:
let combDim: Dimension<ITest, string> = cf.dimension((d: ITest) => Math.round(d.xVal)+':'+d.yVal)
let yDim: Dimension<ITest, number> = cf.dimension((d: ITest) => d.yVal)
这可行,但需要最后拆分所有键以获取图的x和y。除非我缺少任何东西。但是,这里也会出现同样的问题。过滤yDim
会影响combDim.top(3)
,但不会影响组。
API documentation说 “分组与交叉过滤器的当前过滤器相交,但相关联的维度过滤器除外。因此,分组方法仅考虑满足除此维度的过滤器之外的每个过滤器的记录。因此,如果付款的交叉过滤器按类型和总计过滤,则按总数分组只能观察按类型的过滤器。“
这不是说对yDim
的过滤器会影响grouping
的{{1}}吗?
编辑:
我已经创建了我的意思的示例:https://jsfiddle.net/e98not64/2/
事实证明,combDim
始终返回组中的所有成员,但是根据all()
属性的出现情况,使用过滤器对其进行更新。我以前没有注意到这一点,并认为它会忽略过滤器,因为我检查了组的大小并且返回了数组:x我可以只检查值是否为value
并拆分> 0
值以获取key
和x
。那是正确的方法/一个好的方法吗?