交叉滤镜:通过X和Y进行滤光以散布图

时间:2019-03-03 12:44:54

标签: crossfilter

假设我有一个像这样的对象数组:

[{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值以获取keyx。那是正确的方法/一个好的方法吗?

0 个答案:

没有答案