如何排序从“crossfilter-reduce-find-of-uniques”获得前10名

时间:2014-03-24 18:35:37

标签: javascript crossfilter dc.js

我使用下面的代码来获取唯一的数字.. Crossfilter reduce :: find number of uniques

我使用“dc.js/crossfilter -> How to sort data in dc.js chart (like row) - Ascending x Descending”中的排序方法。

当我在行图中显示所有水平条时,其按升序/降序排序。但是当我试图只显示前十名时,顺序不是按值而是按组的字母顺序排列。

var donor=cf.dimension (function(d){ return d.donor;});

var donorCount=donor.group().reduce(
    function (p, d) {
        if (d.projectTitle in p.projectTitle)
            p.projectTitle[d.projectTitle]++;
        else {
            p.projectTitle[d.projectTitle] = 1;
            p.projectCount++;
        }
        return p;
    },

    function (p, d) {
        p.projectTitle[d.projectTitle]--;
        if (p.projectTitle[d.projectTitle] === 0) {
        delete p.projectTitle[d.projectTitle];
        p.projectCount--;
        }
        return p;
    },

    function () {
        return {
        projectCount: 0,
        projectTitle: {}
    };
});//this code is borrowed from http://jsfiddle.net/djmartin_umich/3LyhL/

.....
donorChart.width(320).height(600)
    .dimension(donor)
    .group(donorCount)
    .valueAccessor(function (d) {
        return d.value.projectCount;
    })//borrowed code
    .label(function(d){return "("+d.value.projectCount+")"+d.key;})
    .colorAccessor(function (d){return 1;})                   
    .elasticX(true)
    .ordering(function(d){ return -d.value.projectCount; })
    .data(function(d) {
        return d.top(10);
    });//this top ten code does not work as expected    

没有最后三行代码,图表按值排序显示所有捐赠者。我是javascript的新手,无法修改最后三行来完成我的工作。

2 个答案:

答案 0 :(得分:2)

好的,我刚刚得到它。

donorChart.width(320).height(600)
.data(function (d) {
    return d.order(function (d) {
        return d.projectCount;
    }).top(10);
})
.ordering(function (d) {
    return -d.value.projectCount;
});

答案 1 :(得分:1)

您可以使用group.order在组上设置排序功能。从每个行的访问器返回的值将确定采用前N的行的顺序。 group.top将按此值按降序返回顶行。

在您的情况下,您可以尝试这样做以查看它是否有效:

    donorCount.order(function(d) { return d.projectCount; });

不幸的是,我不知道dc.js如何检索这些组。如果它使用group.top那么这应该有效。如果它使用group.all则会赢得它,因为文档说group.all总是使用自然排序。