2016-12-08 55 views
1

我不知道我在這裏做錯了什麼。 scalePoint工作並且值與軸線一致,但scaleBand由於某種原因會左移。scaleBand()將值左移

我的小提琴: https://jsfiddle.net/go0r0yco/

從我的文件中的代碼的選定部分:

var x = d3.scaleBand() 
     .range([0, width]); 

var y = d3.scaleLinear() 
     .range([height, 0]); 


var xAxis = d3.axisBottom() 
    .scale(x); 

var yAxis = d3.axisLeft() 
    .scale(y); 


// the domain 
x.domain(myData.map(function (d) 
{ 
    console.log(d.ball); 
    return d.ball; 
})); 


y.domain([0, d3.max(myData, function (d) 
{ 
    //console.log("our maxtime" + d.finaltime); 
    return d["ball data"]["final time"]; 
})]); 

// the scatterplot 
myChart.selectAll("dot") 
    .data(myData) 
    .enter() 
    .append("circle") 
    .style("fill", "orange") 
    .attr("r", 5) 
    .attr("cx", function (d) 
    { 
     return x(d.ball); 
    }) 
    .attr("cy", function (d) 
    { 
     if (!d["ball data"]["final time"]) { return height/2 } else { 
     return y(d["ball data"]["final time"]);} 
    }); 
+1

嗯,也許不是最好的解決辦法,但'.attr ( 「CX」,函數(d,i)的 \t \t {//添加一半的帶寬 \t \t \t返回X(d.ball)+(x.bandwidth()/ 2); \t \t})'https://jsfiddle.net/mkaran/nn6bnzhe/1/。希望這可以幫助。 – mkaran

回答

3

樂隊規模並不值左移。你在圖表中得到的是預期的行爲,這正是scalePointscaleBand之間的差異。在一個帶刻度:

離散輸出值由刻度通過將連續的範圍成均勻頻帶(重點煤礦)自動計算。

眼下,對於每一個圈,你得到開始帶

return x(d.ball); 

因此,有類似於分制的輸出,你應該劃分頻段2:

return x(d.ball) + x.bandwidth()/2; 

這裏是你的提琴:https://jsfiddle.net/jxdsqqwy/