d3.js引用单个数组列

时间:2014-02-05 12:32:42

标签: javascript arrays d3.js

我有一组生成的值来绘制线函数。但是,当我调用数组时,该函数只返回数组的单个值,而不是列,因此绘制一条直线(http://tributary.io/inlet/8822590)。这里的语法是什么?提前谢谢。

// Create data

    var v1 = 4.137,
     t = 10,
     x = [],
     y = [];
 for (i = 0.1; i < 190; i += 0.1) {
     x.push(i);
     y.push((Math.pow((v1 / i), 1 / t) - 1) * 100);
 }
 var data = [x, y];
 // Scale data
 var xscale = d3.scale.linear()
     .domain(d3.extent(data, function (d) {
         return d[0];
     }))
 var yscale = d3.scale.linear()
     .domain(d3.extent(data, function (d) {
         return d[1];
     }))
 var line = d3.svg.line()
     .x(function (d) {
         return xscale(d[0])
     })
     .y(function (d) {
         return yscale(d[1])
     });
 var svg = d3.select("svg");
 var path = svg.append("path")
     .data([data])
     .attr("d", line) //this calls the line function with this element's data
 .style("fill", "none")
     .style("stroke", "#000000")
     .attr("transform", "translate(" + [96, 94] + ")")

1 个答案:

答案 0 :(得分:1)

D3期望一行的数据是一个数组数组,其中每个元素确定一行,内部数组中的每个元素都是行的点。你已经传入了一个包含两个元素的数组(一行),所以你得到两个点。

要绘制所有点,请将坐标作为单独的元素推送:

for (i = 0.1; i < 190; i += 0.1) {
  data.push([i, (Math.pow((v1/i),1/t)-1)*102]);
}

其余代码基本保持不变。完整示例here