linearGradient
ここでの正しいアプローチは、要素 ( specs )を使用することだと思います。ここで私の実装を見ることができます: http://jsfiddle.net/nrabinowitz/JZACC/
ここでの主なポイントは、各色を個別の要素として描画する代わりに、スペクトル色のグラデーションを定義し、同じグラデーションを領域とコンテキスト バーの両方に適用することです。
// set up gradient elements
var gradient = defs.append('linearGradient')
.attr('id', 'spectrumGradient');
// set up gradient scale
var gx = d3.scale.linear().range([0, 1]);
次に、データが読み込まれると、stop
各色の要素を作成します。
// update gradient scale
gx.domain(x.domain());
// create gradient
gradient.selectAll('stop')
// remove duplicates
.data(data)
.enter().append('stop')
.attr('offset', function(d) { return gx(d.wl); })
.attr('stop-color', toRGB);
url(#id)
記法を使用してそれを適用します。
focus.append("path")
.datum(data)
.attr("clip-path", "url(#clip)")
.attr("d", area)
.attr('fill', 'url(#spectrumGradient)');