2017-10-24 9 views
1

d3.jsを使用してラベル付きのx軸を描画しようとしていますが、1950年から2015年までのデータ配列があります。年に0から始まるx軸にプロットする予定ですが、 -axis配列の最小値から始まり、最小値として0を持つ配列を編集すると、x軸のラベルが変化します.iamが間違っている箇所は何ですか?ゼロで軸ラベルを始める方法は?

何私のコードの出力:0年は私が欲しいものではありませんどの含まれている1950 ... 1955 .... 1960

出力: 0 .... 200 .... 400 .. 2015 ........私が出力するつもり何

:0 .... 1950 1955 .... ....

ご意見をもとに

link to codepen

$.getJSON(
     "https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json", 
     function(x) { 
     var rawData = x.data; 
     var yearData = []; 
     var gdpData = []; 
     var width = 1020; 
     var height = 100; 
     for (var i = 0; i < rawData.length; i++) { 
      yearData.push(rawData[0][0]); 
      gdpData.push(rawData[1][1]); 
     } 

     //values which should be labeled on x-axis 
     var years = [ 
      1950, 
      1955, 
      1960, 
      1965, 
      1970, 
      1980, 
      1985, 
      1990, 
      2000, 
      2005, 
      2010, 
      2015 
     ]; 
     var svg = d3 
     .select("body") 
     .append("svg") 
     .attr("width", width) 
     .attr("height", height) 
     .append('g'); 


     var x_domain = d3.extent(years, function(d) { 
      return d; 
     }); 

     var xscale = d3 
     .scaleLinear() 
     .domain(x_domain) 
     .nice() 
     .range([20, 600]); 

     var x_axis = d3 
     .axisBottom() 
     .scale(xscale) 
     .ticks(11); 

     svg 
      .append("g") 
      .call(x_axis); 

     } 
    ); 
+0

あなたはそれを拡張したいですか? 0..2015の範囲があれば、あなたのリストの年はかなり右に窮屈になるはずです。それとも、途中で「少しスキップする」ようにしたいですか? – CupawnTae

+0

軸は0から始まり、次の値は1950,1955、... 2015などとなるはずです ** 0 ... 1950 ... 1955 .... 1960 ......... ... 2015 ** スケーリングせずに配列値から直接ティックにラベルを付ける方法はありますか? –

+0

あなたのコメントを編集したばかりです。だからあなたは*どんなスケールも望んでいないのですか?例えば。 1990年と2000年の間の空間は、2000年と2005年の間の空間と同じでなければならないか? – CupawnTae

答えて

1

、あなたが探しているのはです配列の中に0の値を含めて、スケールがLinearの代わりにのスケールを使用してください。

domainとして直接yearsアレイを使用することができ、ポイントの縮尺はデフォルトでtickValuesの値を使用します。

$.getJSON(
 
     "https://raw.githubusercontent.com/FreeCodeCamp/ProjectReferenceData/master/GDP-data.json", 
 
     function(x) { 
 
     var rawData = x.data; 
 
     var yearData = []; 
 
     var gdpData = []; 
 
     var width = 1020; 
 
     var height = 100; 
 
     for (var i = 0; i < rawData.length; i++) { 
 
      yearData.push(rawData[0][0]); 
 
      gdpData.push(rawData[1][1]); 
 
     } 
 

 
     //values which should be labeled on x-axis 
 
     var years = [0, // including the 0 
 
      1950,1955,1960,1965,1970,1980,1985,1990,2000,2005,2010,2015]; 
 
     var svg = d3 
 
     .select("body") 
 
     .append("svg") 
 
     .attr("width", width) 
 
     .attr("height", height) 
 
     .append('g'); 
 

 
     var xscale = d3 
 
     .scalePoint() // instead of Linear 
 
     .domain(years) // can use the years array directly as domain 
 
     .range([20,600]); 
 

 
     var x_axis = d3 
 
     .axisBottom() 
 
     .scale(xscale); 
 

 
     svg 
 
      .append("g") 
 
      .call(x_axis); 
 

 
     } 
 
    );
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/4.9.1/d3.min.js"></script> 
 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

+0

tickValuesは、配列から値をラベル付けするだけのときに便利ですが、出力を見るとわかるように、0を追加すると軸が歪み、0を取り除くとうまくいきます –

+0

ok、今私はあなたが探していることを知っている私は答えを更新しました - あなたが必要とするものを達成する必要があります – CupawnTae

+0

私はちょうど 'tickValues'を設定する必要はないそれに応じて答える – CupawnTae

関連する問題