为用于区域分布图d3.js的分位数标度生成关键字

zd287kbt  于 2022-11-12  发布在  其他
关注(0)|答案(1)|浏览(133)

我正在尝试生成一个用于生成区域分布图的分位数标度的键。分位数标度有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种颜色的图例吗?

klr1opcd

klr1opcd1#

颜色的数量(十种)是意料之中的:你的colorScales.quantiles()只会返回一个值少一个的range数组(有11个元素)。关于quantiles()的文档解释了它的工作原理:
返回分位数阈值。如果范围包含n个离散值,则返回的数组将包含n - 1个阈值。
也就是说,有一件事与你的问题没有直接关系,但却非常重要:这是使用分位数尺度的正确方式:你必须传递整个数据数组,也就是说,domain是一个值的总体,而不仅仅是最小值和最大值。因此,不要:

domain([educMin, educMax])

它应该是:

domain([mapData.objects.counties.geometries].map(d => d.properties.bachelorsOrHigher))

编辑:回答评论,以下是您的Map看起来像与正确的域:
第一个

相关问题