Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 订购带有假组的封顶图表在dc.js中不起作用_Javascript_D3.js_Dc.js_Crossfilter - Fatal编程技术网

Javascript 订购带有假组的封顶图表在dc.js中不起作用

Javascript 订购带有假组的封顶图表在dc.js中不起作用,javascript,d3.js,dc.js,crossfilter,Javascript,D3.js,Dc.js,Crossfilter,我正在尝试对dc.js中的rowChart使用cap函数。但是,我无法让组在渲染图形时使用正确的顺序。 我使用了我发现的“假团体”方法 这是我的HTML代码: <button id="btGO" type="button">GO</button> <div id="chart-row-pnlperb4"></div> var thecross; var numSort = function(a,b) {return (a-b);}; var di

我正在尝试对
dc.js
中的
rowChart
使用
cap
函数。但是,我无法让组在渲染图形时使用正确的顺序。 我使用了我发现的“假团体”方法

这是我的
HTML
代码:

<button id="btGO" type="button">GO</button>
<div id="chart-row-pnlperb4"></div>
var thecross;
var numSort = function(a,b) {return (a-b);};
var dim;
var group;

function go() {
    thecross = crossfilter(
        [
            {key:"a",value1:3,value2:-10},
            {key:"b",value1:3,value2:11},
            {key:"c",value1:3,value2:-12},
            {key:"d",value1:3,value2:5},
            {key:"e",value1:3,value2:3},
            {key:"f",value1:3,value2:15},
            {key:"g",value1:3,value2:-8},
            {key:"h",value1:3,value2:6},
            {key:"i",value1:3,value2:-4},
            {key:"j",value1:3,value2:12},
            {key:"k",value1:3,value2:7},
            {key:"l",value1:3,value2:-6.5}
        ]
    );

    dim = thecross.dimension(function(d) {return(d.key.toUpperCase());});
    mygroup =  dim.group().reduceSum(function(d) {return(d.value2);});

    var sort_group = function(source_group) {
        return {
            all: function () {
                return source_group.all();
            },
            top: function(n) {
                return source_group.top(Infinity).sort(function(x,y){return -numSort(Math.abs(x.value),Math.abs(y.value));}).slice(0,n);
            }
        };
    };
    var sorted_group = sort_group(mygroup);

    var pnlPerB4rowChart = dc.rowChart("#chart-row-pnlperb4");
    pnlPerB4rowChart
        .height(300)
        .width(700)
        .dimension(dim)
        .group(sorted_group)
        .valueAccessor(function(d) {
            return Math.abs(d.value);
        })
        //.ordering(numSort)
        .renderLabel(true)
        .renderTitle(false)
        .labelOffsetY(10)
        .elasticX(true)
        .rowsCap(10)
        .othersGrouper(false)
        .margins({left: 70 ,top: 10, bottom: 30, right: 50});

        dc.renderAll();
};

$(function(){
    $("#btGO").click(go)
});
我想按
value2
字段的绝对值降序排列前10条


我已将代码按值降序排列,这是默认行为。这里唯一的问题是您有负值,因此按绝对值降序与按值排序不一致:

我建议您在计算组时立即取绝对值,以简化数据处理:

    mygroup =  dim.group().reduceSum(function(d) {return Math.abs(d.value2);});

那么你就不需要所有其他的
Math.abs

如果由于某种原因无法执行此操作,还可以将排序顺序值指定为绝对值:

        .ordering(a=>-Math.abs(a.value))

非常感谢,这正是我需要的。我认为在这种情况下,
订购
是不必要的,因为我已经在我的伪组
.top()
定义中订购了。另外,我确实需要对结果值按绝对值排序,而不是对每条记录按绝对值排序。我认为dc.js不会在不进行排序的情况下使用组的排序。我不知道这是为什么。