在d3中查找多个数据维度的范围

时间:2013-11-07 18:57:29

标签: javascript d3.js

如何使用三种不同的数据维度计算我的域的范围?请考虑以下数据:

var data = [
  {
    "Date":"10-10-2013",
    "High1" : 3049,
    "High2" : 2100,
    "high3" : 43
  },
  {
    "Date":"09-10-2013",
     "High1" : 3142,
    "High2" : 2010,
    "high3" : 23
  },
  {
    "Date":"08-10-2013",
    "High1" : 3099,
    "High2" : 2190,
    "high3" : 90

  }

我想为High1绘制一条线,为High3绘制另一条线,为High3绘制另一条线,因此需要找到所有组合的范围,以便为图形创建y轴。

3 个答案:

答案 0 :(得分:5)

var extents = ["High1", "High2", "high3"].map(function(dimensionName) {
    return d3.extent(data, function(d) { return d[dimensionName] });
});

var extent = [d3.min(extents, function(d) { return d[0] }),
              d3.max(extents, function(d) { return d[1] })];

首先单独计算每个维度的范围,然后选择全局最小值和最大值。

答案 1 :(得分:1)

诀窍是使用d3.max和d3.min的访问器。

d3.max(data, function(d){
    return Math.max.apply(Math, [d.High1, d.High2, d.high3]);
})

d3.min(data, function(d){
    return Math.min.apply(Math, [d.High1, d.High2, d.high3]);
})

如果您不理解申请的使用,请参阅此处JavaScript: min & max Array values?

答案 2 :(得分:0)

在@ValarDohaeris回答的基础上,为了使它更具通用性并允许使用不同数量的系列:

definesPresentationContext = true

其中'系列'是包含数据中系列名称的数组。我在角度指令中使用它,允许我将任意数量的系列输入到折线图中

相关问题