dc.js - 如何在我的 crossfilter 组中使用自定义 reduce 函数?

标签 dc.js crossfilter

我的数据集中有一个数字字段。我正在使用仪表板通过年份、年龄等筛选该字段。事实上,这个字段是人口样本的比率,因此当我创建 var ratesPerAge = ageDim.group().reduceSum(function(d) {return +d.suicidesPercentage}); 因为我使用的是 .reduceSum(),所以每条记录的比率都被汇总了。

我的目标是获得类似于平均值的值,并且每次都在过滤行上获得平均速率。

我已经尝试使用我在另一个线程中找到的这个函数来实现我想要的解决方案。

var col1DimTotal = col1Dim.group().reduce(reduceAdd, reduceRemove, 
  reduceInitial);

function reduceAdd(p, v) {
  ++p.count;
  p.total += v.value;
  return p;
}

function reduceRemove(p, v) {
  --p.count;
  p.total -= v.value;
  return p;
}

function reduceInitial() {
  return {count: 0, total: 0};
}

然而,这并没有达到我想要的效果。

这是我的费率维度以及与另一个维度的分组:

 var ratesDim = ndx.dimension(function(d) {return 
 d.suicidesPercentage;});
 var ageDim = ndx.dimension(function(d) {return d.age});  
 var ratesPerAge = ageDim.group().reduceSum(function(d) {return 
 +d.suicidesPercentage}); 

我想通过我选择的行的平均速率进行过滤。

最佳答案

我想我解决了这个问题并且我设法实现了我想要的:

var yearDim  = ndx.dimension(function(d) { return new Date(d.year); });
function reduceAddAvg(p,v) {
    ++p.count
    p.sum += v.suicidesPercentage;
    p.avg = p.sum/p.count;
    return p;
}
function reduceRemoveAvg(p,v) {
    --p.count
    p.sum -= v.suicidesPercentage;
    p.avg = p.count ? p.sum/p.count : 0;
    return p;
}
function reduceInitAvg() {
    return {count:0, sum:0, avg:0};
}

var ratesPerYear = yearDim.group().reduce(reduceAddAvg, reduceRemoveAvg, reduceInitAvg);

 yearChart // line chart
     .width(660)
     .height(400)
     .dimension(yearDim)
     .group(ratesPerYear).valueAccessor(function (d) {
          return d.value.avg;
      }) // this is the reference of the AVG
     .x(d3.scaleTime().domain([new Date("January 1, 1987 00:00"), new 
        Date("January 4, 2015 00:00:00")]))
     .elasticY(true)
     .controlsUseVisibility(true)
     .yAxisLabel("Rates over 100k people")
     .xAxisLabel("Year")
     .centerBar(true);

关于dc.js - 如何在我的 crossfilter 组中使用自定义 reduce 函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54492743/

相关文章:

javascript - dc.js 按 y 轴/值排序顺序折线图

javascript - crossfilter.js,如何处理日期维度上的人为重复项

DC.js 复合图表在条形中心对齐折线图的点

javascript - dc.js x 轴勾选意外行为

Javascript 门面模式从不显示初始设置

javascript - dc.js + 根据数据集使图表动态化

javascript - Crossfilter reduce 函数

grails - DC Crossfilter隐藏特定选择

javascript - D3 Crossfilter 基本示例

javascript - dc.js:如何在对象元素列表上减少计数?