Еще немного пояснений по ловушке Ларса, так как я уже начал играться...
Ключ был в этом разделе кода:
var group = svg.selectAll("g")
.data(l)
.enter().append("g");
Переменной group
назначается выбор ввода, а не необработанный выбор. Затем в следующей строке:
var bar = group.selectAll("rect")
.data(function(d){
return d;
});
В конечном итоге вы определяете bar
только как прямоугольники, которые являются дочерними элементами только что введенных групп. Таким образом, несмотря на то, что вы правильно обрабатывали обновление для прямоугольников, весь этот раздел кода даже не выполнялся. Вам нужно сохранить выбор группы, прежде чем разветвлять цепочку, чтобы иметь дело с вводом групп:
var group = chart.selectAll("g")
.data(dt);
group.enter().append("g");
var bar = group.selectAll("rect")
.data(function(d){
return d;
});
Кроме того, вам не хватает j
в объявлении функции в вашем обновлении. И вы можете уменьшить дублирование кода, поместив свой код обновления прямоугольника после вашего кода ввода прямоугольника, и тогда любые атрибуты, которые устанавливаются в обновлении, не должны указываться для ввода. (В некоторых старых примерах этот шаблон не используется, потому что исходные версии d3 не передавали автоматически вновь введенные элементы в основной выбор.)
// enter
bar.enter().append("rect")
.attr("fill", function(d,i,j){
return colors(j);})
.attr("height", 0);
// update
bar.attr("transform", function(d, i, j) {
x = "translate("+(i*2.2*w+j*w)+",0)";
return x; })
.transition()
.duration(750)
.attr("width", w)
.attr("height", function(d){return d*10;});
person
AmeliaBR
schedule
31.01.2014
g
. Вы ищете что-то вроде этого? - person Lars Kotthoff   schedule 01.02.2014