d3.js - d3.v3 转换会立即发生吗?

标签 d3.js transition bar-chart

我最近从 d3.v2 过渡到 d3.v3,并试图了解转换机制的差异。

在下面的代码中,我试图制作一个条形图,在绘制时,条形会通过过渡增加高度。该代码在 d3.v2 中工作没有问题,但在 v3 中,转换似乎“立即”发生(高度立即设置为最终值)。

graph.enter()//for each bucket
.append('g')
.attr('transform',function(d,i){  return 'translate('+(xBand(i))+')';}) 
.attr('width',xBand.rangeBand())
.each(function(data,index){//here we are working on the selection for a single bucket
        var $this=d3.select(this); //this refers to the group selection
        var currentY=0;
        var rects=$this.selectAll('rect')
            .data(data.values);

        rects.enter()
        .insert('rect')
        .attr('group-id',me.groupId)
            .attr('y',Hats.accessor('y'))
        .attr('width',xBand.rangeBand())
        .attr('fill',(function(elt){ return me.colors(me.groupId(elt));}));

        rects.transition()
        .duration(750)
        .attr('height',(function(elt){ 
            var h=_.compose(heightScale,me.values)(elt);
                d3.select(this).attr('y',currentY);
                currentY+=h;
                return h;
        }));
});

最佳答案

尝试在输入选择中设置起始高度:

rects.enter()
    .insert('rect')
    .attr('group-id',me.groupId)
    .attr('y',Hats.accessor('y'))
    .attr('width',xBand.rangeBand())
    .attr('fill',(function(elt){ return me.colors(me.groupId(elt));}))
    .attr('height', 0);

rects.transition()
    .duration(750)
    .attr('height',(function(elt){ 
        var h=_.compose(heightScale,me.values)(elt);
            d3.select(this).attr('y',currentY);
            currentY+=h;
            return h;
    }));

关于d3.js - d3.v3 转换会立即发生吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18073388/

相关文章:

javascript - 了解 D3.js 如何将数据绑定(bind)到节点

D3.js:我可以从刻度线偏移刻度标签吗?

iOS:通过在图像之间混合来平滑按钮发光效果

android - fragment 之间的动画过渡 - 滑动效果 - 半透明的statusBar和ActionBar

python - 具有分级范围的 Pandas 条形图

javascript - d3js 为条形图创建图例

javascript d3 从一组数据创建数据集

Javascript/D3 --- 标签的条件格式

javascript - 在javascript中为一组嵌套的div中的元素子集设置动画收缩和扩展过渡

javascript - 在 Chart.js 中使用范围条形图可视化间隔