我的数据看起来像这样......
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 文档(此处),您不必为序数比例指定域,并且在您尝试使用它时会填充它。然而,在我的情况下, y(d.name) 总是返回 0 并且 y.rangeBand() 引发异常,即使当我查看域数组已填充到缩放对象中时也是如此。
所以,我通过预先定义我的域来解决这个问题......
.domain(data.map(function (d){ return d.name;}))
但我希望能够动态添加到这个域,如果我现在这样做,它不会超出创建时设置的原始值。这甚至可能吗?
我对 d3 很陌生,所以我可能在这里遗漏了一些重要的东西。