如何根据 d3.js 中的索引分配颜色



我正在尝试根据 metricValue 变量(整数)获取颜色,但下面的代码 #1f77b4 返回相同的颜色。我做错了什么?

function getColorForNode(d) {
    var p=d3.scale.category10();
    var metricValue = metrics.getScore(d.id)
    return(p(metricValue)); // Returns the same color independently of metricValue
}

这与没有为此序数刻度指定域的事实有关。

确实,您不需要像文档 (https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_domain) 中所述为序数刻度指定域。在这种情况下,它将在您使用秤时自动动态构建域。它会在缩放实例中跟踪该域。

问题是,在您的情况下,您为每次调用 getColorForNode 创建一个新的缩放实例。因此,没有持久域。每次从头开始构建域时,它都会输出第一个范围值:#1f77b4。

因此,基本上有两种解决方案:

选项 1:将缩放实例构造保留在函数之外

var p = d3.scale.category10();
function getColorForNode(d) {
  var metricValue = metrics.getScore(d.id);
  return p(metricValue);
}

选项 2:显式指定域

function getColorForNode(d) {
  var p = d3.scale.category10().domain(d3.range(10));
  var metricValue = metrics.getScore(d.id);
  return p(metricValue);
}

最新更新