2つのカラーを補間する(interpolateRgb)

説明

D3.jsで2つのカラーを補間するにはinterpolateRgb()メソッドを使います。interpolateRgb()メソッドのパラメーターには2つのカラーを示す文字や数値などを指定します。interpolateRgb()メソッドはカラーを補間し#rrggbb形式の文字列として返す関数を返します。関数のパラメーターに0.0〜1.0までの数値を指定することで、補間されたカラーを取得することができます。

サンプル [サンプルを実行する] [サンプルをダウンロード]

HTMLソース

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>D3.js サンプル</title>
<link rel="stylesheet" href="css/main.css">
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<h1>D3.jsサンプル</h1>
<div id="result"></div>
<div id="myGraph"></div>
<script src="js/sample.js"></script>
</body>
</html>

JavaScriptコード

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
var func = d3.interpolateRgb("red", "blue");    // カラーを補間する関数を返す
var data = "";
var dataList = [];
for(var i=0; i<=1; i+=0.1){
    data = data + func(i)+", "; // iに応じた結果を求める
    dataList.push(func(i));
}
d3.select("#result").text(data);    // 結果を出力
// SVGで色の変化を確認
var svg = d3.select("#myGraph").append("svg")
    .attr("width", 320).attr("height", 240)
svg.selectAll("rect")   // SVGでの四角形を示す要素を指定
    .data(dataList)
    .enter()
    .append("rect")
    .attr("x", 0)
    .attr("y", function(d, i){
        return i * 10;
    })
    .attr("width", 300)
    .attr("height", 10)
    .attr("style", function(d){
        var rgb = d3.rgb(d);
        return "fill:rgb("+rgb.r+","+rgb.g+","+rgb.b+")";
    })