2016-12-17 50 views
1

のために、x軸-intervallsを設定するにはどうすればhereからこのコードをつかんで、ちょうどデータ変数を変更:D3.jsバージョン4:適切にヒストグラム

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

.bar rect { 
    fill: steelblue; 
} 

.bar text { 
    fill: #fff; 
    font: 10px sans-serif; 
} 

</style> 
<svg width="960" height="500"></svg> 
<script src="https://d3js.org/d3.v4.min.js"></script> 
<script> 

var data = [1,1,1,1, 2,2,2,2,2, 4,4, 5, 6,6,6, 7,7,7, 9,9,9, 12,12,12,12,12,12,12]; 

var formatCount = d3.format(",.0f"); 

var svg = d3.select("svg"), 
    margin = {top: 10, right: 30, bottom: 30, left: 30}, 
    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 x = d3.scaleLinear() 
    .rangeRound([0, width]); 

var bins = d3.histogram() 
    //.domain([0,12]) 
    .domain(x.domain()) 
    .thresholds(x.ticks(10)) 
    (data); 

var y = d3.scaleLinear() 
    .domain([0, d3.max(bins, function(d) { return d.length; })]) 
    .range([height, 0]); 

var bar = g.selectAll(".bar") 
    .data(bins) 
    .enter().append("g") 
    .attr("class", "bar") 
    .attr("transform", function(d) { return "translate(" + x(d.x0) + "," + y(d.length) + ")"; }); 

bar.append("rect") 
    .attr("x", 0.5) 
    .attr("width", x(bins[0].x1) - x(bins[0].x0) - 1) 
    .attr("height", function(d) { return height - y(d.length); }); 

bar.append("text") 
    .attr("dy", ".75em") // why? 
    .attr("y", 6) 
    .attr("x", (x(bins[0].x1) - x(bins[0].x0))/2) 
    .attr("text-anchor", "middle") 
    .text(function(d) { return formatCount(d.length); }); 

g.append("g") 
    .attr("class", "axis axis--x") 
    .attr("transform", "translate(0," + height + ")") 
    .call(d3.axisBottom(x)); 

</script> 

私のチャートは次のようになります。 enter image description here

d3.histogram().domain([0,12])に変更しようとしたか、threshholdで遊んでいましたが、運がまだありません。コンソールプリントは

マイ目標

  1. ビンは、8つのアレイ(data は、8つの一意の値を有するもの)を有する配列であるべきです。
  2. 正しいx軸とビン

答えて

2

あなたはx軸のドメインを設定する必要がありますディスプレイ:

var x = d3.scaleLinear() 
    .domain([0,12]) //you have not defined the domain 
    .rangeRound([0, width]); 

コードhere

+0

作業ありがとうございました。私は何とかヒストグラムの '' domain''呼び出しが自動的にそれをしていると思いました。ちょっとしたフォローアップの質問:x軸から0.1〜1.0の値はどこに来るのですか? –

+0

私は0.1と1.0を得ることができませんあなたが提供する値は最小値1と最大12を持っているので、私はそのようなドメインを与えました。 – Cyril

関連する問題