LoginSignup
2
2

More than 5 years have passed since last update.

d3.jsで棒グラフを描く その2(スケール)

Posted at

はじめに

d3.jsで棒グラフを描く その1の続きです。
前回作成したプログラムにスケールを適用します。
表示領域の高さが100として、100以上の値を持つ棒グラフを表示するとしたら、どうするでしょうか。全体が高さ100以内に収まるよう比率で値を求めますよね。スケールは、実際のデータを表示領域に合った値へ変換してくれる仕組みです。

スケール

スケールを宣言します。domainに変換前の値の最小値と最大値を設定し、rangeに変換後の値の最小値と最大値を設定します。
このスケールを使うと、5は50、10は100に変換してくれます。

// スケールの宣言
var H = 100;

var scale = d3.scale.linear()
              .domain([0, 10])
              .range([0, H]);

スケールの適用

高さを設定していたところを、先ほど宣言したscale関数に置き換えます。

svg.selectAll("rect")
    .data(dataset)
    .enter()
    .append("rect")
    .attr("x", function(d, i) {
      // dがデータ、iが添え字
      // 棒グラフのx開始点をずらす
      // 棒グラフがくっつかないようにする
      return i * (BAR_W + 1);
    })
    .attr("y", function(d, i) {
      // 開始点を全体高さから高さを引いた値とする
      //return H - d[1] * 10;
      return H - scale(d[1]);
    })
    .attr("width", BAR_W)
    .attr("height", function(d) {
      // データ配列の1コ目を高さとする
      // わかりにくいので、値を10倍
      // return d[1] * 10;
      return scale(d[1]);
    })
    // グラフの色設定
    .attr("style", "fill:turquoise");

// テキストの追加
svg.selectAll("text")
    .data(dataset)
    .enter()
    .append("text")
    .text(function(d) {
      return d[1];
    })
    .attr("text-anchor", "middle")
    .attr("x", function(d, i) {
      return i * (BAR_W + 1) + 10;
    })
    .attr("y", function(d) {
      //return H - d[1] * 10 + 15;
      return H - scale(d[1]) + 15;
    })
    .attr("font-size", "10px")
    .attr("fill", "white");

ここまでを実行
見た目は変わりませんが、スケールを使って表示をしています。

高さを変えてみましょう。

//var H = 100;
var H = 200;

ここまでを実行
全体が崩れることなく、高さを変更できました。
次は、d3.jsで棒グラフを描く その3で、軸を追加します。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2