2013-08-26 60 views
2

我有這個折線圖在這裏:添加格來D3.js線圖

jsfiddle.net/yfqQ4/

我現在的問題是,我沒有得到在背景中的固有網格工作與傳說(y和x軸)是這樣的:http://lab.creativebrains.net/linechart.png

任何人都可以張貼我的代碼片段我應該如何實現它或類似的東西?

謝謝!

+1

[This question](http://stackoverflow.com/questions/15580300/proper-way-to-draw-gridlines)可能會有所幫助。 –

回答

5

可以繪製背景網格是這樣的:

//vertical lines 
svg.selectAll(".vline").data(d3.range(26)).enter() 
    .append("line") 
    .attr("x1", function (d) { 
    return d * 20; 
}) 
    .attr("x2", function (d) { 
    return d * 20; 
}) 
    .attr("y1", function (d) { 
    return 0; 
}) 
    .attr("y2", function (d) { 
    return 500; 
}) 
    .style("stroke", "#eee"); 

// horizontal lines 
svg.selectAll(".vline").data(d3.range(26)).enter() 
    .append("line") 
    .attr("y1", function (d) { 
    return d * 20; 
}) 
    .attr("y2", function (d) { 
    return d * 20; 
}) 
    .attr("x1", function (d) { 
    return 0; 
}) 
    .attr("x2", function (d) { 
    return 500; 
}) 
    .style("stroke", "#eee"); 

這裏你可以看到它是如何與你的jsfiddle(更新)工作原理: http://jsfiddle.net/cuckovic/Phzvy/

6

我會建議使用d3.svg.axis( ).scale()將網格綁定到您的座標。我根據你的代碼畫了一個quick examplehttp://jsfiddle.net/yfqQ4/5/

enter image description here

要點是使用現有的秤,x和y,並利用蜱爲網格。請注意,heightwidth是定義容器大小的變量。這裏是相關的代碼:

var numberOfTicks = 6; 

var yAxisGrid = d3.svg.axis().scale(y) 
    .ticks(numberOfTicks) 
    .tickSize(width, 0) 
    .tickFormat("") 
    .orient("right"); 

var xAxisGrid = d3.svg.axis().scale(x) 
    .ticks(numberOfTicks) 
    .tickSize(-height, 0) 
    .tickFormat("") 
    .orient("top"); 

svg.append("g") 
    .classed('y', true) 
    .classed('axis', true) 
    .call(yAxisGrid); 

svg.append("g") 
    .classed('x', true) 
    .classed('axis', true) 
    .call(xAxisGrid);