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

标签 svg 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);
}

关于svg - 如何根据 d3.js 中的索引分配颜色?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13627944/

相关文章:

javascript - 测量 svg 路径的长度?

javascript - d3.js 连续单击时删除两个具有匹配属性的元素

javascript - D3.js 将整数轴更改为字符串

d3.js - d3 : make the d3. csv 函数同步

javascript - 文本元素未显示在 SVG 上

javascript - 使用 <use> 动态创建时,SVG <animate> 不起作用

javascript - CSS3 - Transform-origin 不适用于 d3.js 中的 SVG 元素

css - 如何在不使用 JavaScript 的情况下从上一个 svg 动画状态进行补间?

d3.js - D3 更改缩放和平移手势

javascript - 如何在不破坏现有进入/退出绑定(bind)的情况下更新整个数据集?