我的数据看起来像这样...
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 很陌生,所以我可能在这里遗漏了一些重要的东西。