2017-04-24 59 views
0

我有變焦能力,對此我預先計算的線性迴歸(OLS)一D3 JS散點圖,我可以畫趨勢線是這樣的:如何畫出從-Inf到Inf的線?

var objects = svg.append("svg") 
    .classed("objects", true) 
    .attr("width", width) 
    .attr("height", height); 

var x = d3.scale.linear() 
    .range([0, width]).nice(); 
var y = d3.scale.linear() 
    .range([height, 0]).nice(); 

objects.append("svg:line") 
    .classed("trendline", true) 
    .attr("x1", x(xMin)) 
    .attr("y1", y(lineIntercept + xMin*lineSlope)) 
    .attr("x2", x(xMax)) 
    .attr("y2", y(lineIntercept + xMax*lineSlope)) 
    .attr("stroke", colorVal) 
    .attr("stroke-width", 2); 

這樣做我想除了線什麼從xMinxMax,我希望它從-Inf到Inf,這在用戶縮小時變得明顯,我該怎麼做?

+0

縮小或平移線的時候我的意思是兩邊永遠不會結束。是的,我想這就是它的意思。 –

+0

我認爲更合理的方法是在放大時調整xMin/xMax。 – chazsolo

+0

噢好主意..沒想到它... –

回答

0

解決的辦法是(在Q評論中)在每次縮放後找出x軸的當前域位置結束(獲得調用x.domain()),然後更新該行。完整的解決方案如下:

objects 
    .selectAll(".trendline") 
    .attr("x1", x(x.domain()[0])) 
    .attr("y1", y(lineIntercept + x.domain()[0]*lineSlope)) 
    .attr("x2", x(x.domain()[1])) 
    .attr("y2", y(lineIntercept + x.domain()[1]*lineSlope)) 
    .attr("stroke", colorVal) 
    .attr("stroke-width", 2); 

這給人的視覺印象是從線-Inf去INF