Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 根据回归系数在散点图上绘制回归线_Javascript_D3.js_Regression - Fatal编程技术网

Javascript 根据回归系数在散点图上绘制回归线

Javascript 根据回归系数在散点图上绘制回归线,javascript,d3.js,regression,Javascript,D3.js,Regression,我尝试使用以下方法绘制回归线: 我按照教程添加了以下代码 dataLinear = [{x: 8, y: 3},{x: 2, y: 10},{x: 11, y: 3},{x: 6, y: 6},{x: 5, y: 8},{x: 4, y: 12},{x: 12, y: 1},{x: 9, y: 4},{x: 6, y: 9},{x: 1, y: 14}] linearRegression = d3.regressionLinear() .x(d => d.x) .y(d =

我尝试使用以下方法绘制回归线:

我按照教程添加了以下代码

dataLinear = [{x: 8, y: 3},{x: 2, y: 10},{x: 11, y: 3},{x: 6, y: 6},{x: 5, y: 8},{x: 4, y: 12},{x: 12, y: 1},{x: 9, y: 4},{x: 6, y: 9},{x: 1, y: 14}]

linearRegression = d3.regressionLinear()
   .x(d => d.x)
   .y(d => d.y)
   .domain([-1.7, 16]);
res = linearRegression(dataLinear)
console.log(res)

现在,我得到的系数是:


0: Array [ -1.7, 15.961993243243242 ]
​
1: Array [ 16, -3.621621621621621 ]
​
a: -1.1064189189189189
​
b: 14.08108108108108
​
length: 2
​
predict: function S()
​
rSquared: 0.8731378215564962

如何使用系数在散点图顶部绘制直线

编辑: 在理解什么是线生成器之前,我使用了以下代码:

         var a_reg_line = svg.append("svg:line")
        .attr("x1", xScale(0))
        .attr("y1", yScale(res.b))
        .attr("x2", xScale(10))
        .attr("y2", yScale( (10*res.a) + res.b ))           

看起来库是这样构建的,您可以将其返回值
res
传递给
d3。行
生成器:

...
let line = d3.line()
  .x((d) => x(d[0]))
  .y((d) => y(d[1]));

svg.append("path")
  .datum(res)
  .attr("d", line)
...
下面是一个使用
d3
绘制它的完全简化的示例:


设dataLinear=[{
x:8,
y:3
}, {
x:2,
y:10
}, {
x:11,,
y:3
}, {
x:6,
y:6
}, {
x:5,
y:8
}, {
x:4,
y:12
}, {
x:12,
y:1
}, {
x:9,
y:4
}, {
x:6,
y:9
}, {
x:1,
y:14
}]
设linearRegression=d3.regressionLinear()
.x(d=>d.x)
.y(d=>d.y)
.domain([-1.7,16]);
设res=线性回归(dataLinear)
让边距={
前30名,
右:20,,
底数:30,
左:50
},
宽度=600-边距。左侧-边距。右侧,
高度=270-margin.top-margin.bottom;
设x=d3.scaleLinear().range([0,width]);
设y=d3.scaleLinear().range([height,0]);
让svg=d3.select(“body”)
.append(“svg”)
.attr(“宽度”,宽度+边距。左侧+边距。右侧)
.attr(“高度”,高度+边距。顶部+边距。底部)
.附加(“g”)
.attr(“转换”,
“翻译(“+margin.left+”,“+margin.top+”);
x、 域(d3.范围(数据线性,(d)=>d.x));
y、 域(d3.范围(数据线性,(d)=>d.y));
//添加valueline路径。
svg.selectAll(“圆圈”)
.数据(数据线性)
.输入()
.附加(“圆圈”)
.attr(“r”,5)
.样式(“填充”、“钢蓝”)
.attr(“cx”,(d)=>x(d.x))
.attr(“cy”,(d)=>y(d.y));
设line=d3.line()
.x((d)=>x(d[0]))
.y((d)=>y(d[1]);
追加(“路径”)
.基准面(res)
.attr(“d”,行)
.风格(“笔划”、“钢蓝”)
.样式(“笔划宽度”、“2px”);
svg.append(“g”)
.attr(“变换”、“平移(0)”、“高度+”)
.call(d3.axisBottom(x));
svg.append(“g”)
.调用(d3.左(y));

谢谢你,马克。我不知道线路发生器是什么。我会查的。如果回归返回的点与多项式回归相同,而线性回归返回的是截距和斜率,那么这种方法有效吗?@learner,是的,它的工作方式是相同的,请参阅我刚才添加的第二个代码片段。@learner,顺便说一句,这种方法有效,因为库返回一个混合数组/对象。可打印数据点是数组,而拟合的元数据(r值等)是对象的属性。