我有以下数据及其计数的条形图。这是jsfiddle 。我想过滤维度,以便在条形图中我只有 Alyssa 和 Bob。我尝试过使用 .filter()
创建过滤变量的不同变体函数并直接过滤图表。主要问题似乎是 XDimension.group().reduceCount
因为显然“组方法只考虑满足除此维度过滤器之外的每个过滤器的记录。”我搞不清楚了。感谢帮助。
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();
最佳答案
是否可以在将数据添加到交叉过滤器之前对其进行过滤?
data = data.filter(function (d) { return d.Owner !== "Joe"; });
var ndx = crossfilter(data);
我目前正在解决类似的问题,这是一个临时解决方案。我尝试像这样过滤维度:
var filtered = XDimension.filter(function (d) { return d !== "Joe"; });
var YDimension = filtered.group().reduceCount(function (d) { return d.Owner });
当我打印出“已过滤”时,我发现维度已正确过滤。然而,当绘制图表时,“Joe”仍然在数据集中。
如果我找到更好的解决方案,我会回复..
关于javascript - 如何使用 crossfilter 和 dc.js 过滤、分组和绘制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25124277/