ヒートマップの線形カラー スケールを作成しようとしています。最初の色がデータの最小値に対応し、最後の色がデータの最大値に対応する特定の色の大規模なセットを通過するようにカラー スケールを使用したいと考えています。
ドメインに最小値と最大値の間の 17 の値を与えることでこれを行うことができることはわかっていますが、ユーザーがデータセットを変更できる場合 (したがって、ヒートマップの色を変更する場合)、これを動的に行う方法がわかりません。
本質的にはフォローしたいのですが、うまくいかないことはわかっています
var colorScale = d3.scale.linear()
.range(["#6363FF", "#6373FF", "#63A3FF", "#63E3FF", "#63FFFB", "#63FFCB",
"#63FF9B", "#63FF6B", "#7BFF63", "#BBFF63", "#DBFF63", "#FBFF63",
"#FFD363", "#FFB363", "#FF8363", "#FF7363", "#FF6364"])
.domain([d3.min(dataset, function(d) {return d;}),
d3.max(dataset, function(d) {return d;})]);
「ドメイン」を機能させるために何を入力する必要があるか教えてください。
編集:私は自分がやりたいことをするものを見つけました。RI を使用して、上記の 17 色の間の 256 色を designer.colors 関数で計算し、これを範囲に入れました。これにより、連続したカラースケールの感覚が得られます
var colorScale = d3.scale.linear()
.range(["#6363FF", "#6364FF", "#6364FF", "#6365FF",
"... several other lines with color codes ..."
"#FF6764", "#FF6564", "#FF6464", "#FF6364"])
.domain(d3.range(1,257));
var quantize = d3.scale.quantile()
.range(d3.range(1,257))
.domain([d3.min(dataset, function(d) {return d;}),
d3.max(dataset, function(d) {return d;})]);
今、私はこの方法で色を使うことができます
colorScale(quantize(dataset))
しかし、これをより少ないコード行で実行できるかどうか疑問に思っていますか?