是否可以在动态域的序数尺度上使用 rangeBand() ?

2024-01-03

我的数据看起来像这样...

var data = [{name:'a', value : 97},
          {name:'b', value : 24},
          {name:'c', value : 10}];

我有一个像这样创建的序数表......

var y = d3.scale.ordinal().rangeBands([0, 30 * data.length]);

我正在用它来创建一个像这样的基本图表......

    chart.selectAll("rect")
        .data(data)
        .enter().append("svg:rect")
        .attr("y", function(d,i){ return y(d.name);})
        .attr("width", function(d,i){ return x(d.value);})
        .attr("height", y.rangeBand());

根据 d3 文档(here https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-ordinal_domain)您不必为序数尺度指定域,并且当您尝试使用它时它会被填充。然而,在我的情况下, y(d.name) 始终返回 0 并且 y.rangeBand() 引发异常,即使当我查看域数组已填充在比例对象内时也是如此。

所以,我通过预先定义我的域来解决这个问题......

.domain(data.map(function (d){ return d.name;}))

但我希望能够动态添加到此域,现在如果我这样做,它不会扩展到超出创建时设置的原始值。这可能吗?

我对 d3 很陌生,所以我可能在这里遗漏了一些重要的东西。


With 范围带 https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-rangeBands and 范围点 https://github.com/mbostock/d3/wiki/Ordinal-Scales#wiki-rangePoints,您必须定义一个域才能访问该范围。域告诉序数标尺要显示多少个带或点。然而,你can稍后更改域(通过调用scale.domain(newDomain))并且范围将更新。您只是不能通过将以前未见过的值传递给比例来隐式地做到这一点。无论如何,用序数尺度定义域通常是一个好主意,这样你总是能得到确定性的行为。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以在动态域的序数尺度上使用 rangeBand() ? 的相关文章

随机推荐