2016-05-04 24 views
1

私は棒グラフでプロットする必要のある活動追跡データを持っています。なぜ私の棒グラフはrectをレンダリングしないのですか?私は間違いを私は見ていない。私はデータ構造が正しいと思うが、私は全く調べることができない。データはGitHub gistで提供されています。棒グラフはレンダリングされませんd3

<!DOCTYPE html> 
 
<meta charset="utf-8"> 
 

 
<svg class="chart"></svg> 
 
<script src="//d3js.org/d3.v3.min.js" charset="utf-8"></script> 
 

 
<script> 
 
    var margin = { 
 
     top: 20, 
 
     right: 20, 
 
     bottom: 70, 
 
     left: 40 
 
    }, 
 
    width = 900 - margin.left - margin.right, 
 
    height = 700 - margin.top - margin.bottom; 
 

 

 

 
    var parseDate = d3.time.format("%H:%M:%S").parse; 
 
    var x = d3.time.scale().range([0, width]); 
 

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

 
    var xAxis = d3.svg.axis() 
 
    .scale(x) 
 
    .orient("bottom") 
 
    //.tickFormat(d3.time.format("%H:%M:%S")); 
 

 
    var yAxis = d3.svg.axis() 
 
    .scale(y) 
 
    .orient("left") 
 
    .ticks(10); 
 

 
    var svg = d3.select("body").append("svg") 
 
    .attr("width", width + margin.left + margin.right) 
 
    .attr("height", height + margin.top + margin.bottom) 
 
    .append("g") 
 
    .attr("transform", 
 
     "translate(" + margin.left + "," + margin.top + ")"); 
 

 

 
    d3.json("data/testdata.json", function(data) { 
 

 

 

 
    x.domain(d3.extent(data.dataset, function(d) { 
 
     return parseDate(d.time); 
 
    })); 
 
    // x.domain(d3.map(data.dataset, function(d) { 
 
    // console.log(d.time); 
 
    //  return parseDate(d.time) 
 
    // })); 
 
    // y.domain(d3.extent(data, function(d, i) { 
 
    //  return d.dataset[i].steps; 
 
    // })); 
 
    y.domain([0, d3.max(data.dataset, function(d) { 
 
     return d.steps; 
 
    })]); 
 

 
    svg.append("g") 
 
     .attr("class", "x axis") 
 
     .attr("transform", "translate(0," + height + ")") 
 
     .call(xAxis) 
 
     .selectAll("text") 
 
     .style("text-anchor", "end") 
 
     // .text("Time") 
 
     .attr("dx", "-.8em") 
 
     .attr("dy", "-.55em") 
 
     .attr("transform", "rotate(-90)"); 
 

 
    svg.append("g") 
 
     .attr("class", "y axis") 
 
     .call(yAxis) 
 
     .append("text") 
 
     .attr("transform", "rotate(-90)") 
 
     .attr("y", 6) 
 
     .attr("dy", ".71em") 
 
     .style("text-anchor", "end") 
 
     .text("Steps"); 
 

 
    svg.selectAll("bar") 
 
     .data(data) 
 
     .enter().append("rect") 
 
     .style("fill", "steelblue") 
 
     .attr("class", "bar") 
 
     .attr("x", function(d, i) { 
 
     return x(parseDate(d.dataset[i].time)); 
 
     }) 
 
     .attr("y", function(d, i) { 
 
     return y(d.dataset[i].steps); 
 
     }) 
 
     .attr("width", function(d) { 
 
     return width/d.dataset.length 
 
     }) 
 
     .attr("height", function(d, i) { 
 
     return height - y(d.dataset[i].steps); 
 
     }); 
 

 
    }); 
 
</script>

あなたは私にヒントを与えることはできますか?他の方法で私のjsonを入れ子にしなければならないのですか?それは基本的でなければならないが、何らかの形で、私はここに

答えて

0

OK棒グラフを得ることはありませんフィドルです:してきたなら

svg.selectAll("bar") 
     .data(data) 

た間違ったすべてのデータセットのhttps://jsfiddle.net/1nujczwh/11/

まず

svg.selectAll("bar") 
     .data(data.dataset) 

x、y、その他の属性には何らかの作業が必要です。以下のような:d3はすでにデータをループしているので、すべてのステップが0 Iだったので

return x(parseDate(d.dataset[i].time)); 

return x(parseDate(d.time)); 

であるべき、あなたは配列[インデックス]

でそれらを選択する必要はありませんあなたが見たいと思っていたことを知らないので、私はいくつかのデータを変更しました。

データの内容を確認するために、属性内にconsole.log(d);(私もすでにこれを行いました)を配置することをおすすめします。

関連する問題