You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用D3.js生成指定分位数并精准复刻对应图例?

使用D3.js实现精准分位数图例

我需要用D3.js复刻分位数图例,已经有自定义算法逻辑,但不清楚如何用D3落地实现。给定数据数组如下:

[
24.17,
24.58,
24.82,
24.91,
26.25,
28.04,
29.67,
32.06,
32.08,
32.4,
32.53,
32.58,
32.94,
33.89,
34.15,
34.84,
35.39,
37.64,
40.75,
42.31,
46.89
]

要求实现一个函数,传入该数组和分位数数量(仅支持3、4、5),输出对应的图例。注意:3分位数实际包含2个分界值(包含最值),4、5分位数同理。颜色范围固定为:

  • colorbase: rgb(231, 25, 32)
  • colorLimit: rgb(245, 163, 166)

之前参考的方案存在精度问题,比如针对上述数据,预期分位值应为>32.15%、32.06%/34.15%、<32.06%,但实际得到>31.26%、33.98%/31.26%、<33.98%。以下是我自行实现的非D3版本代码,需要基于这个逻辑精准复现图例效果:

export const calcularCuantiles = (data, numQuantiles) => {
  data.sort((a, b) => a - b);
  var n = data.length;
  var quantiles = [];

  for (var i = 1; i < numQuantiles; i++) {
    quantiles.push(Math.ceil(i * (n - 1) / numQuantiles)); // 向上取整
  }
  // 添加最后一个索引,即n - 1
  quantiles.push(n - 1);
  var quantileValues = quantiles.map(q => d3.quantile(data, q / (n - 1)));
  // 移除数组最后一个元素(最后一次循环重复添加的)
  quantileValues.pop();
  // 将分位值按从大到小排序
  quantileValues.sort((a, b) => b - a);
  return quantileValues;
}

内容的提问来源于stack exchange,提问作者pabeni

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 06:05:08