dc.js:包括计数为零时的所有柱
dc.js: include all bars when count is zero
我需要在图表中包含所有条形。示例:我有五个小节 (1,2,3,4,5),得分为 reduceCount
。当所有条形都有值时,图形就可以了。
但是,当条形图没有值(在本例中为一个)时:
我尝试添加 .y(d3.scale.ordinal().domain([1, 2, 3, 4, 5]))
,但行图表中不存在此方法。
您可以使用 "fake group" 来确保 bin 存在,即使没有任何值可以填充它们。
function ensure_group_bins(source_group) { // (source_group, bins...}
var bins = Array.prototype.slice.call(arguments, 1);
return {
all:function () {
var result = source_group.all().slice(0), // copy original results (we mustn't modify them)
found = {};
result.forEach(function(d) {
found[d.key] = true;
});
bins.forEach(function(d) {
if(!found[d])
result.push({key: d, value: 0});
});
return result;
}
};
};
这样使用:
var mod_group = ensure_group_bins(your_group, 1, 2, 3, 4, 5);
chart.group(mod_group)
我不会在这里使用.data()
,因为它可以interfere with capped charts,其中图表是其中之一。 (尽管期望它起作用是完全合理的。)
我需要在图表中包含所有条形。示例:我有五个小节 (1,2,3,4,5),得分为 reduceCount
。当所有条形都有值时,图形就可以了。
但是,当条形图没有值(在本例中为一个)时:
我尝试添加 .y(d3.scale.ordinal().domain([1, 2, 3, 4, 5]))
,但行图表中不存在此方法。
您可以使用 "fake group" 来确保 bin 存在,即使没有任何值可以填充它们。
function ensure_group_bins(source_group) { // (source_group, bins...}
var bins = Array.prototype.slice.call(arguments, 1);
return {
all:function () {
var result = source_group.all().slice(0), // copy original results (we mustn't modify them)
found = {};
result.forEach(function(d) {
found[d.key] = true;
});
bins.forEach(function(d) {
if(!found[d])
result.push({key: d, value: 0});
});
return result;
}
};
};
这样使用:
var mod_group = ensure_group_bins(your_group, 1, 2, 3, 4, 5);
chart.group(mod_group)
我不会在这里使用.data()
,因为它可以interfere with capped charts,其中图表是其中之一。 (尽管期望它起作用是完全合理的。)