dc.js中的numberDisplay,显示行图中值的总和

时间:2014-08-08 18:00:36

标签: javascript d3.js dc.js crossfilter

我有一个简单的行图,其中只有三个条形图。我想使用dc.numberDisplay()方法将条形值的总和显示为数字。我得到的只是其中一个酒吧的价值。重点是根据选择显示总数。对于考试,我选择A和B,总数将显示13.这是jsfiddle,我的代码如下:

HTML

<body>
    <div id='Chart'>
        <h4 id = "total">Number: </h4>
    </div>
</body>

JS

var data = [{
    Category: "A",
    ID: "1"
}, {
    Category: "A",
    ID: "1"
}, {
    Category: "A",
    ID: "1"
}, {
    Category: "A",
    ID: "2"
}, {
    Category: "A",
    ID: "2"
}, {
    Category: "B",
    ID: "1"
}, {
    Category: "B",
    ID: "1"
}, {
    Category: "B",
    ID: "1"
}, {
    Category: "B",
    ID: "2"
}, {
    Category: "B",
    ID: "3"
}, {
    Category: "B",
    ID: "3"
}, {
    Category: "B",
    ID: "3"
}, {
    Category: "B",
    ID: "4"
}, {
    Category: "C",
    ID: "1"
}, {
    Category: "C",
    ID: "2"
}, {
    Category: "C",
    ID: "3"
}, {
    Category: "C",
    ID: "4"
}, {
    Category: "C",
    ID: "4"
},{
    Category: "C",
    ID: "5"
}];

var ndx = crossfilter(data);

var XDimension = ndx.dimension(function (d) {
    return d.Category;
});

var YDimension = XDimension.group().reduceCount(function (d) {
    return +d.value;
});


dc.rowChart("#Chart")
    .width(480).height(300)
    .dimension(XDimension)
    .group(YDimension)
    .label(function (d) {
    return d.key + "  " + d.value;})
    .ordering(function (d) {
    return -d.value});

dc.numberDisplay("#total")
    .valueAccessor(function(d){return +d.value})
    .group(YDimension);   

dc.renderAll();
编辑:感谢Gordon现在显示正确的金额,但选择条形时它不会改变。现在,继续努力。

1 个答案:

答案 0 :(得分:4)

XDimension.groupAll()用于numberDisplay组,而不是YDimension。这是一个特殊的组,只有一个bin,包含所有已过滤的记录。

https://github.com/square/crossfilter/wiki/API-Reference#dimension_groupAll