如果值等于零,如何隐藏dc.js行图值

时间:2014-12-04 22:39:35

标签: dc.js

如果过滤后dc.js中的行图值等于零,我们如何隐藏。我们有这样的代码:

    var kurum=data.dimension(function(d){return ""+ d.KURUM;});
    var kurumGroup=kurum.group().reduceSum(function(d){return +d.INSIDANS});

    kurumRowMapChart
                    .width(300)
                    .height(200)
                    .margins({top: 5, left: 10, right: 10, bottom: 20})
                    .dimension(kurum)
                    .group(kurumGroup)
                    .colors(d3.scale.category10())
                    .elasticX(true)
                    .ordering(function(d) { return -d.value })
                    .xAxis().ticks(4);

此代码正常工作,但如果值等于零,我们希望隐藏过滤器。

谢谢

2 个答案:

答案 0 :(得分:5)

你可以创建一个"假组"在调用.all()时删除包含零的bin:

function remove_empty_bins(source_group) {
    return {
        all:function () {
            return source_group.all().filter(function(d) {
                return d.value != 0;
            });
        }
    };
}

像这样使用它:

var filtered_group = remove_empty_bins(kurumGroup);

kurumRowMapChart.dimension(kurum)
    .group(filtered_group)
    ...

https://github.com/dc-js/dc.js/wiki/FAQ#remove-empty-bins

我们的想法是创建一个位于crossfilter和dc.js之间的对象,它看起来像一个crossfilter组,并根据需要对其进行过滤。

这是一个有点复杂的例子,旨在测试不同数量的柱之间的转换:

http://dc-js.github.io/dc.js/transitions/ordinal-row-transitions.html

(目前转换效果不是很好,但它很好地证明了remove_empty_bins。)

答案 1 :(得分:0)

@Gordon:好的答案! remove_empty_bins()对我有用! :)

我不得不使用 d.value.count 而不是d.value,但是我认为这取决于您使用的组缩减功能:

return d.value.count !== 0;