简体   繁体   English

如何使用交叉过滤器和dc.js过滤,分组和绘制数据

[英]How to filter, group and plot data using crossfilter and dc.js

I have the following data and a bar chart of its counts. 我有以下数据和其计数的条形图。 Here is the jsfiddle . 这是jsfiddle I would like to filter the dimensions, so that in the bar chart I only have Alyssa and Bob. 我想过滤尺寸,以便在条形图中只有Alyssa和Bob。 I have tried different variations of creating filtered variables using .filter() function and filtering the chart directly. 我尝试了使用.filter()函数创建过滤变量并直接过滤图表的各种变体。 The main problem appears to be the XDimension.group().reduceCount because apparently "group methods consider only records that satisfy every filter except this dimension's filter." 主要问题似乎是XDimension.group().reduceCount因为显然“组方法仅考虑满足除此维度的过滤器之外的每个过滤器的记录”。 I am lost. 我搞不清楚了。 Help appreciated. 帮助表示赞赏。

var data = [{
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "A"
}, {
    Owner: "Alyssa",
    ID: "B"
}, {
    Owner: "Bob",
    ID: "A"
}, {
    Owner: "Bob",
    ID: "A"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "C"
}, {
    Owner: "Bob",
    ID: "D"
}, {
    Owner: "Joe",
    ID: "A"
}, {
    Owner: "Joe",
    ID: "A"
}, {
    Owner: "Joe",
    ID: "D"
}, {
    Owner: "Joe",
    ID: "D"
}, {
    Owner: "Joe",
    ID: "E"
}];

var ndx = crossfilter(data);


var XDimension = ndx.dimension(function (d) {
    return d.Owner;
});
var YDimension = XDimension.group().reduceCount(function (d) {
    return d.Owner;
});
dc.barChart("#Chart")
    .width(480).height(300)
    .dimension(XDimension)
    .group(YDimension)
    .centerBar(true)
    .gap(56)
    .x(d3.scale.ordinal().domain(XDimension))
    .xUnits(dc.units.ordinal)
    .xAxisLabel("Market Developer")
    .yAxisLabel("Unique Counts")
    .elasticY(true)
    .xAxis().tickFormat(function (v) {
    return v;
});
dc.renderAll();

Would it be possible to filter the data prior to adding it to the crossfilter? 在将数据添加到交叉过滤器之前是否可以过滤数据?

data = data.filter(function (d) { return d.Owner !== "Joe"; });
var ndx = crossfilter(data);

I am currently working on a similar problem and this was a temporary solution. 我目前正在研究类似的问题,这是一个临时解决方案。 I tried filtering the dimension like so: 我试过像这样过滤维度:

var filtered = XDimension.filter(function (d) { return d !== "Joe"; });
var YDimension = filtered.group().reduceCount(function (d) { return d.Owner });

When I print out "filtered", I see that the dimension was properly filtered. 当我打印出“已过滤”时,我看到尺寸已正确过滤。 However, when the chart is drawn, "Joe" was still in the data set. 但是,绘制图表时,“ Joe”仍在数据集中。

Ill post back if I find a better solution.. 如果我找到更好的解决方案,请病假回去。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM