2017-02-05 12 views
1

単純なブロックの例を模倣しようとしていますが、hereの例では、x軸とy軸を描くように見えます。私はデータを別々にロードしています。これはtsvファイルではなく配列を介して行われますが、私は数回コーディネートしましたが、すべてがスケールとラインに同じ方法で供給されていると思います。非作業JSBin hered3折れ線グラフ、線図なし

<!DOCTYPE html> 
<html> 
<head> 
    <script src="https://d3js.org/d3.v4.min.js"></script> 
    <meta charset="utf-8"> 
    <meta name="viewport" content="width=device-width"> 
    <title>JS Bin</title> 
</head> 
<body> 
<svg width="960" height="500"></svg> 

<script> 
var data = [["2014-12-31", 0.31999999999999],["2014-11-30", 2.71],["2014-10-31", -4.05],["2014-09-30", 4.22],["2014-08-31", 2.17],["2014-07-31", 5.36],["2014-06-30", 3.99],["2014-05-31", 3.52],["2014-04-30", -.46],["2014-03-31", -8.22],["2014-02-28", 5.89]] 

var svg = d3.select("svg"), 
    margin = {top: 20, right: 20, bottom: 30, left: 50}, 
    width = +svg.attr("width") - margin.left - margin.right, 
    height = +svg.attr("height") - margin.top - margin.bottom, 
    g = svg.append("g").attr("transform", "translate(" + margin.left + "," + margin.top + ")"); 



var parseTime = d3.timeParse("%Y-%m-%d"); 

var x = d3.scaleTime().rangeRound([0, width]); 
var y = d3.scaleLinear().rangeRound([height, 0]); 

var data = data.map(function(d){ 
    return [parseTime(d[0]), +d[1]] 
}); 
var line = d3.line() 
    .x(function(d){ 
    return d[0]; 
    }) 
    .y(function(d){ 
    return d[1]; 
    }); 

x.domain(d3.extent(data, function(d) { return d[0]; })); 
y.domain(d3.extent(data, function(d) { return d[1]; })); 

g.append("g") 
    .attr("transform", "translate(0," + height + ")") 
    .call(d3.axisBottom(x)) 
    .select(".domain") 
    .remove(); 

g.append("g") 
    .call(d3.axisLeft(y)) 
    .append("text") 
    .attr("fill", "#000") 
    .attr("transform", "rotate(-90)") 
    .attr("y", 50) 
    .attr("dy", "0.9em") 
    .attr("text-anchor", "end") 
    .text("Price ($)"); 

g.append("path") 
    .datum(data) 
    .attr("fill", "none") 
    .attr("stroke", "steelblue") 
    .attr("stroke-linejoin", "round") 
    .attr("stroke-linecap", "round") 
    .attr("stroke-width", 3) 
    .attr("d", line); 
</script> 

</body> 
</html> 

私が間違ってやっていることは明らか何?

var line = d3.line() 
    .x(function(d){ 
    return d[0]; 
    }) 
    .y(function(d){ 
    return d[1]; 
    }); 

は、コードのこのセクションでは、データのプロット座標を設定し、あなたが現在お使いのデータ値を使用している:

答えて

1

問題は、あなたがあなたのデータは座標あなたのSVG内適切スペースに合わせてスケーリングされていないということですあなたのxとyのsvgの値としてスケーリングせずに。

var line = d3.line() 
    .x(function(d){ 
    console.log(x(d[0])); return x(d[0]); 
    }) 
    .y(function(d){ 
    return y(d[1]); 
    }); 

このようにすると、意図したとおりにグラフが描画されます。