Javascript 使用D3.js在最小和最大数字之间生成二维数组
我是D3.js的新手,所以请容忍我。下图显示了我试图绘制的内容,它是在Excel中创建的。每个对象都有一条漂亮的曲线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("#
$( 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))] );