0

我有以下数据:

   parseDate = d3.time.format("%Y").parse,
   format = d3.time.format("%Y");

  var myData = [
   { dataField: "A", coords: [
    {xCoord: parseDate('1990') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1991') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1992') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1993') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1994') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1995') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1996') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1997') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1998') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1999') , yCoord: Math.random() * 100}
    ]
  },
  { dataField: "B",coords: [
    {xCoord: parseDate('1990') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1991') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1992') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1993') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1994') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1995') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1996') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1997') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1998') , yCoord: Math.random() * 100},
    {xCoord: parseDate('1999') , yCoord: Math.random() * 100}
    ]
  }

我正在尝试使用 d3 创建折线图。另外,我有代码:

    var data = function (d) { return d.coords; };
    var xValue = function (d) { return d.xCoord; };
    var yValue = function (d) { return d.yCoord; };

我一直在创建我的规模:

    xScale = d3.time.scale()
      .domain([new Date(1988,10,30),new Date(2000,01,30)])
      .range([margin.left, 600 - margin.right]);

但是,我的目标是让我的域将自己调整为最小的一年到最大的一年(或者甚至可能在每个方向上延长一年)。但到目前为止,我一直没有成功。我试图使用

    .domain(d3.extent(data, xValue)); 

但一直没有运气。我对 javascript 还很陌生,我认为我的困难在于我存储数据的方式。任何想法都会很棒。

4

1 回答 1

0

您可以使用内置的 d3.extent 函数来获取数组的最小值和最大值。它需要一个数组和一个可选的访问器函数。它将返回一个包含 2 个值的数组,即最小值和最大值:

[min, max]

我会尝试

xScale.domain(d3.extent(myData[0].coords, function(d) {return d.xCoord; }));

然后冲洗并重复其他数据标签for如果有一堆不同的数据集,您可以循环执行。

于 2013-06-13T18:15:18.593 回答