dc.js group.top(5)无法在图表中工作

时间:2014-05-30 11:02:01

标签: dc.js crossfilter

我正在尝试根据收入显示前5个国家

我试图在图表中加入不起作用

.group(countryGrp.top(10))

但是当我尝试console.log(countryGrp.top(10))时,我可以看到值

var country = data.dimension(function(d){return d.PName});
var countryGrp = lead.group().reduceSum(function(d) {
            return d.Amount;
        });

var leadBarChart = dc.barChart("#country-chart")
        leadBarChart.width(500).height(450).transitionDuration(750)
                .margins({
                    top : 20,
                    right : 10,
                    bottom : 80,
                    left : 50
                })
                .dimension(country)
                .group(countryGrp.top(10))
                .ordinalColors([ "#1F77B4" ]).elasticY(true).centerBar(true)
                .title(function(d) {
                    return d.Amount;
                }).gap(6).xUnits(function() {
                    return 2;
                })
                .x(d3.scale.linear())
                .renderHorizontalGridLines(true).xAxis().ticks(5)
                .tickFormat(d3.format("d"));

我收到此错误未被捕获TypeError:undefined不是一个函数可以任何人帮助我在这里。提前致谢

2 个答案:

答案 0 :(得分:3)

所以group.top(N)没有返回一个组对象;它返回一个数组。您需要为组参数提供组。

不幸的是,条形图当前不支持capping,但你可以做的是预过滤数据,如下所述:

https://github.com/dc-js/dc.js/wiki/FAQ#filter-the-data-before-its-charted

基本上你会创建一个"假组"它具有.all()功能,只返回您想要的项目。

我打算修复.data()以便它适用于条形图:

https://github.com/dc-js/dc.js/issues/584

(并且支持封顶也很好)但是现在我认为你被困在"假组"解决方法。

如果您无法使用此功能,请在此处发表评论,或者将示例添加到上面链接的Wiki中,如果您确实可以使用它!

答案 1 :(得分:2)

您希望使用以下内容:

var viewModel = (MyViewModel)DataContext;

然后,您可以使用.group(fakeGroup)正确绘制数据图表。