我正在尝试生成一个用于生成区域分布图的分位数标度的键。分位数标度有11种颜色的范围,但我似乎只能为11种颜色中的10种生成一个键。
下面是分位数尺度的代码:
const educMin = d3.min(mapData.objects.counties.geometries, d => d.properties.bachelorsOrHigher);
const educMax = d3.max(mapData.objects.counties.geometries, d => d.properties.bachelorsOrHigher);
const colourScale = d3.scaleQuantile()
.domain([educMin, educMax])
.range(['#fff5eb','#fee8d3','#fdd8b3','#fdc28c','#fda762','#fb8d3d','#f2701d','#e25609','#c44103','#9f3303','#7f2704']);
下面是图例的代码:
const legendBars = colourScale.quantiles()
const legend = map.append('g')
.attr('id', 'legend')
.attr('transform', 'translate(495, 550)');
legend.selectAll('rect')
.data(legendBars)
.enter()
.append('rect')
.attr('fill', function(d) {
return colourScale(d)
})
.attr('x', (d, i) => 20 * i)
.attr('width', 20)
.attr('height', 20);
这仅生成分位数比例中指定的11种颜色中的10种:
链接到完整的codepen:(https://codepen.io/luke-worley/pen/YzvXMjM)(英文)
有谁能解释一下如何生成一个11种颜色的图例吗?
1条答案
按热度按时间klr1opcd1#
颜色的数量(十种)是意料之中的:你的
colorScales.quantiles()
只会返回一个值少一个的range数组(有11个元素)。关于quantiles()
的文档解释了它的工作原理:返回分位数阈值。如果范围包含n个离散值,则返回的数组将包含n - 1个阈值。
也就是说,有一件事与你的问题没有直接关系,但却非常重要:这是不使用分位数尺度的正确方式:你必须传递整个数据数组,也就是说,
domain
是一个值的总体,而不仅仅是最小值和最大值。因此,不要:它应该是:
编辑:回答评论,以下是您的Map看起来像与正确的域:
第一个