我的数据看起来像这样......
var data = [{name:'a', value : 97},
{name:'b', value : 24},
{name:'c', value : 10}];
Run Code Online (Sandbox Code Playgroud)
我有一个像这样创建的序数量表......
var y = d3.scale.ordinal().rangeBands([0, 30 * data.length]);
Run Code Online (Sandbox Code Playgroud)
我用它来创建这样的基本图...
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());
Run Code Online (Sandbox Code Playgroud)
根据d3文档(此处),您无需为序数规范指定域,并且在尝试使用它时将填充它.在我的情况下,但是y(d.name)总是返回0并且y.rangeBand()引发异常,即使我看到域数组已经填充在scale对象中.
所以,我通过预先定义我的域来解决这个问题...
.domain(data.map(function (d){ return d.name;}))
Run Code Online (Sandbox Code Playgroud)
但我希望能够动态添加到此域,如果我这样做,它不会超出创建时设置的原始值.这甚至可能吗?
我对d3很新,所以我可能会遗漏一些重要的东西.
mbo*_*ock 12
使用rangeBands和rangePoints,您必须定义域才能访问该范围.域告诉序数比例要显示多少个波段或点.但是,您可以稍后(通过调用scale.domain(newDomain))更改域,并且范围将更新.你不能通过将以前看不见的值传递给比例来隐式地做到这一点.无论如何,定义具有序数尺度的域通常是个好主意,这样您总能获得确定性行为.
| 归档时间: |
|
| 查看次数: |
13187 次 |
| 最近记录: |