我使用下面的代码来获取唯一的数字.. 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的新手,无法修改最后三行来完成我的工作。
答案 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
总是使用自然排序。