function vis(selection, animate) { var width = 960, height = 401; var x = d3.scale.ordinal().domain([0, 1]) .rangeBands([0, width], 0.1); var y = d3.scale.ordinal().domain([0, 1, 2, 3, 4, 5]) .rangeBands([height, 0], 0.2); // The initial and final value of animated elements var bar_y = { 'initial' : height, 'final' : function(d) { return y(d[1]); } }; var canvas = d3.select(selection) .append('svg:svg') .attr('width', width) .attr('height', height); var bars = canvas.selectAll('cols') .data([[0, 1, 2], [0, 1, 2, 3, 4, 5]]) .enter().append('svg:g').selectAll('bars') .data(function(d, i) { return d.map(function(e) { return [i, e]; }); }) .enter().append('svg:rect') .attr('class', 'bar') .attr('width', x.rangeBand()) .attr('height', y.rangeBand()) .attr('x', function(d) { return x(d[0]); }) .attr('y', bar_y[animate ? 'initial' : 'final']) if (animate) { bars.transition() .duration(1000) .attr('y', bar_y['final']) } }