Javascript 使用D3.js在最小和最大数字之间生成二维数组

Javascript 使用D3.js在最小和最大数字之间生成二维数组,javascript,arrays,excel,d3.js,svg,Javascript,Arrays,Excel,D3.js,Svg,我是D3.js的新手,所以请容忍我。下图显示了我试图绘制的内容,它是在Excel中创建的。每个对象都有一条漂亮的曲线 $( document ).ready(function() { var bezierLine = d3.svg.line() .x(function(d) { return d[0]; }) .y(function(d) { return d[1]; }) .interpolate("basis"); var svg = d3.select("#

我是D3.js的新手,所以请容忍我。下图显示了我试图绘制的内容,它是在Excel中创建的。每个对象都有一条漂亮的曲线

$( document ).ready(function() {
   var bezierLine = d3.svg.line()
    .x(function(d) { return d[0]; })
    .y(function(d) { return d[1]; })
    .interpolate("basis");

var svg = d3.select("#bezier-demo")
    .append("svg")
    .attr("width", 300)
    .attr("height", 150);

svg.append('path')
    .attr("d", bezierLine([ [0.1, 0.13], [0.2, 0.26], [0.3, 0.38], [0.4, 0.51], [0.5, 0.64], [0.6, 0.77]]))
    .attr("stroke", "red")
    .attr("stroke-width", 1)
    .attr("fill", "none")
    .transition()
        .duration(2000)
        .attrTween("stroke-dasharray", function() {
            var len = this.getTotalLength();
            return function(t) { return (d3.interpolateString("0," + len, len + ",0"))(t) };
        });
});

根据这个公式,我得到了这条光滑的线。我将得到X的Alpha、Beta和max参数,在此基础上,我必须使用下面的公式->y=Alpha(1-2.71828*(-Beta*X))找到y,X必须是从最小值100到消耗量的一个数字,递增100

在Excel中,我可以像这样生成X的数字,然后找到每个X的y

100     1.28E-01
200     0.256638873
300     0.384674585
400     0.51252152
500     0.640179956
600     0.76765017
700     0.894932441
800     1.022027046
900     1.14893426
1,000   1.275654361
1,100   1.402187624
1,200   1.528534325
但是在JS中,基于以下内容,如何生成X,它应该在0到消耗量之间增加100,并且应该创建二维数组,以便为每个对象提供X,Y。例如,如果最小值为0,最大值为20000,如何在最小值和最大值之间生成增量为100的数组

如何根据生成的X计算Y?你能给我一些指导,用D3.js创建这个二维数组来画这条线吗

name    alpha        beta       max_x_val   spend
BAN1    140.3       3.86E-05    28,675.00   29,919.00
BAN2    115.31      2.08E-05    32,302.00   28,367.00
BAN3    5.07E-05    19,740.00   16,972.00
ADJ4    91.8        0.000029119 25,855.00   27,112.00
ADJ5    90.3        2.81E-05    25,793.00   23,883.00
我可以用下面的代码画出这条线,这非常有效,只要我能为每个对象创建二维数组

$( document ).ready(function() {
   var bezierLine = d3.svg.line()
    .x(function(d) { return d[0]; })
    .y(function(d) { return d[1]; })
    .interpolate("basis");

var svg = d3.select("#bezier-demo")
    .append("svg")
    .attr("width", 300)
    .attr("height", 150);

svg.append('path')
    .attr("d", bezierLine([ [0.1, 0.13], [0.2, 0.26], [0.3, 0.38], [0.4, 0.51], [0.5, 0.64], [0.6, 0.77]]))
    .attr("stroke", "red")
    .attr("stroke-width", 1)
    .attr("fill", "none")
    .transition()
        .duration(2000)
        .attrTween("stroke-dasharray", function() {
            var len = this.getTotalLength();
            return function(t) { return (d3.interpolateString("0," + len, len + ",0"))(t) };
        });
});

你要找的是函数。它生成算术级数,通过简单的
.map()
可以将其增强为二维数组:

var lineData = d3.range(0, spend, 100)
     .map(x => [ x, alpha * (1 - 2.71828 * (-beta * x))] );