如果您想创建自动图例,我的建议是您根据您的情况创建一个数据集colorScale
域和范围,并将此数据集绑定到您的图例。这样,只要您更改域或缩放范围,数据集就会发生变化。
例如,如果您有以下比例,域从 0 到 500:
var colorScale = d3.scale.quantize()
.domain([0, 500])
.range(["#d73027", "#f46d43", "#fdae61", "#fee090", "#e0f3f8",
"#abd9e9", "#74add1", "#4575b4"]);//this is colorBrewer.RdYlBu[8]
您可以创建一个包含所有值范围的数组。这将是我们的数据集,名为colorRange
:
var colorRange = [];
for(var i = 0; i < colorScale.range().length; i++){
colorRange.push(colorScale.invertExtent(colorScale.range()[i])[0]);
};
根据前面的代码,如果我们console.log这个数组,我们会得到:
console.log(colorRange);// returns [0, 62.5, 125, 187.5, 250, 312.5, 375, 437.5]
其中包含 8 种颜色对应的域值。例如,如果我们从中删除两种颜色colorScale
范围,我们现在有:
console.log(colorRange);// returns [0, 83.333, 166.666, 250, 333.333, 416.666]
一旦你有了这个colorRange
数组,您不仅拥有图例的域值,而且还可以使用以下方法轻松设置颜色:
colorScale(colorRange[i])
Where i
从第一个值到最后一个值。
PS:如果您使用分位数刻度,我们可以放弃繁琐的 for 循环并简单地使用[0].concat(colorScale.quantiles())
创建我们的数组。