无法设置正确的d3.extent访问者

时间:2016-04-25 21:19:19

标签: javascript d3.js

在此示例中,我无法动态设置Y比例。如果有人能提供帮助,我会很高 我能够完美地设置X轴,但我无法找到如何参考我的Y数据来定义轴的范围。现在我得到的比例从-2到500,代码中不起作用的部分是注释掉的行。 谢谢你的时间!

在这里插入: https://plnkr.co/edit/eQ4HgxQC49CZIPVBXjQX

  data.forEach(function(d) {
    d["year"] = parseDate(d["year"])
  });

  var subset = data.filter(function(el) {
    return el.metric === "rank"
  });


  var concentrations = productCategories.map(function(category) {
      return {
        category: category,
        datapoints: subset.map(function(d) {
          return {
            date: d["year"],
            concentration: +d[category]
          }
        })
      }
    })

  xScale.domain(d3.extent(subset, function(d) {
    return d["year"];
  }));

  yScale.domain([-2, 500]);
  //yScale.domain(d3.extent(subset, function(d) {return d["rank"] })); //

2 个答案:

答案 0 :(得分:1)

实际上,我终于能够以一种干净的方式解决这个问题:

yScale.domain([
d3.min(concentrations, function(c) { return d3.min(c.datapoints,function(v) { return v.concentration; }); }),
d3.max(concentrations, function(c) { return d3.max(c.datapoints, function(v) { return v.concentration; }); })
]);

但现在我有另一个问题,因为我希望Y比例显示只有一个选定数组的极值。这意味着我必须在解析数据时进行过滤。不确定如何做,可能会打开另一个问题。非常感谢@gerardofurtado的时间和耐心!

答案 1 :(得分:0)

好的,我会提供一个临时解决方案,因为我确定必须采用更简短的方法来实现。

首先,让我们提取所有不是"年"来自您的数据:

var values = productCategories.map(function(category){
    return subset.map(function(d){
        return  +d[category]
    })
});

然后,让我们合并这个数组:

var merged = [].concat.apply([], values);

最后:

yScale.domain(d3.extent(merged));