关于javascript:如何使用crossfilter和dc.js过滤,分组和绘制数据

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

我有以下数据和其计数的条形图。这是jsfiddle。我想过滤尺寸,以便在条形图中只有Alyssa和Bob。我尝试了使用.filter()函数创建过滤变量并直接过滤图表的各种变体。主要问题似乎是XDimension.group().reduceCount,因为显然"组方法只考虑满足除此维的过滤器之外的每个过滤器的记录。"我迷路了。感谢帮助。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
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();

在将数据添加到交叉过滤器之前是否可以过滤数据?

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

我目前正在处理类似的问题,这是一个临时解决方案。我尝试像这样过滤维度:

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

当我打印出"已过滤"时,我看到尺寸已正确过滤。但是,绘制图表时," Joe "仍在数据集中。

如果我找到更好的解决方案,我会回发..