Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/378.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_Dc.js_Crossfilter - Fatal编程技术网

Javascript 使用dc.js呈现行图时丢失数据

Javascript 使用dc.js呈现行图时丢失数据,javascript,dc.js,crossfilter,Javascript,Dc.js,Crossfilter,创建dc.js行图时丢失数据 var ndx = crossfilter(data); var emailDimemsion = ndx.dimension(function(d) { return d.email; }); var emailGroup = emailDimemsion.group().reduce( function(p, d) { ++p.count; p.totalWordCount += +d.word_cou

创建dc.js行图时丢失数据

  var ndx = crossfilter(data);

  var emailDimemsion = ndx.dimension(function(d) {
    return d.email;
  });

  var emailGroup = emailDimemsion.group().reduce(
    function(p, d) {
      ++p.count;
      p.totalWordCount += +d.word_count;
      p.studentName = d.student_name;
      return p;
    },
    function(p, d) {
      --p.count;
      p.totalWordCount -= +d.word_count;
      p.studentName = d.student_name;
      return p;
    },
    function() {
      return {
        count: 0,
        totalWordCount: 0,
        studentName: ""
      };
    });


  leaderRowChart
    .width(600)
    .height(300)
    .margins({
      top: 0,
      right: 10,
      bottom: 20,
      left: 5
    })
    .dimension(emailDimemsion)
    .group(emailGroup)
    .elasticX(true)
    .valueAccessor(function(d) {
      return +d.value.totalWordCount;
    })
    .rowsCap(15)
    .othersGrouper(false)
    .label(function(d) {
      return (d.value.studentName + ": " + d.value.totalWordCount);
    })
    .ordering(function(d) {
      return -d.value.totalWordCount
    })
    .xAxis()
    .ticks(5);

  dc.renderAll();
小提琴在这里

我的图表如下所示:

但我希望我的结果是

我是否以某种方式破坏了reduce函数以忽略数据


谢谢

不幸的是,使用交叉过滤器的dc.js图表有两个级别的排序

首先,dc.js使用
group.top(N)
提取前N,其中N是
rowsCap
值。Crossfilter根据所选内容对这些项目进行排序

然后,它使用
图表.ordering
功能再次对项目进行排序

在这种情况下,第二种排序可以掩盖第一种排序不正确的事实。Crossfilter不知道如何对对象进行排序,除非您告诉它要查看哪个字段,所以
group.top(N)
会返回一些随机项

您可以通过使交叉筛选组的
顺序
与图表的
顺序
匹配来修复图表:

emailGroup.order(function(p) {
  return p.totalWordCount;
})
你的小提琴叉子:

看起来有一个学生的字数要长得多,但这与您的电子表格一致:

我们计划将来停止使用
group.top
,因为当前的行为非常不一致


更新:如果您愿意使用不稳定的最新版本,dc.js 2.1.4及更高版本请勿使用
组。顶部
-上限由
图表决定。排序
,仅此而已。

是否有解决此行为的方法?问题是我需要使用一个假组来显示基于类别的数据子集。我的小提琴显示了使用普通组和假组时的差异。这不是一个始终如一的问题;从下拉列表中选择二月可以,但十二月不行。我想以每个类别的图表结束(小提琴中的数据类型)。有没有更好的方法来呈现我的图表?@Santoshewlal,我已经澄清了上面提供的修复方法。另请参见有关最新版本的说明。