从 dc.js 图中删除空组

Remove empty groups from dc.js graph

我已经完成了所有关于从 dc.js 图中删除空箱的 SO 问题,但除了假组方法之外找不到任何东西

filter_group = function(oldGroup) {
    return {
        all: oldGroup.all().filter(...)
    };
}
newGroup = filter_group(oldGroup);

然后在 dc.js 图中使用 newGroup

这对我来说是在第一次绘制时创建正确的 bin 集,但当我将过滤器应用于其他维度时它不会重新过滤。所以我最终得到了正确的初始箱,但在随后的重绘中我仍然得到空箱。

我想要实现的是适当的重新过滤和重绘,即根据我的过滤功能去除垃圾箱并重新绘制,排除过滤后的垃圾箱,从而具有不同数量的垃圾箱。

这里有一个 fiddle 说明了我的意思。 我已经设置了数据,以便在第一张图中过滤 a 应该删除第二张图中的 g 条(并且在第二张图中过滤 g 应该删除 a第一张图中的一个) 但它不会从轴上删除空条,它只显示没有条的标签。

起点:

在第二张图中过滤 g 后(我希望 a 甚至不显示在轴上):

PS :我已经标记了 reductiod3.js 以防有使用这些包的优雅解决方案,即使我宁愿将其保留在 dc.js 内。

X 刻度的域决定了显示哪些条。

您正在手动设置图表上的域:

.x(d3.scale.ordinal().domain(filter_group(group).all().map(function(d) {return(d.key);}).unshift("")))

我确定您正在用它解决其他一些问题,但是如果您删除它并指定

.elasticX(true)

相反,那么您就不需要 on("filtered",... 并且当它们的值为零时图表将删除分箱。

Fork of your fiddle.