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值等)是对象的属性。