Javascript 为什么不是';D3过渡工作

Javascript 为什么不是';D3过渡工作,javascript,d3.js,Javascript,D3.js,我是D3新手,在两个数据集之间顺利转换时遇到困难。以下是我目前拥有的超简化版本: var h = 500; var w = 500; var data = [ 10, 15, 12, 9 ] var data_two = [ 6, 15, 20, 19, 11 ] var vis = d3.select('body') .append('svg') .attr({ height: 500, width: 500 }) .a

我是D3新手,在两个数据集之间顺利转换时遇到困难。以下是我目前拥有的超简化版本:

var h = 500;
var w = 500;

var data = [
  10,
  15,
  12,
  9
]

var data_two = [
  6,
  15,
  20,
  19,
  11
]

var vis = d3.select('body')
  .append('svg')
  .attr({
    height: 500,
    width: 500
  })
  .append('g');

function buildChart(data) {
  var square = vis.selectAll('rect')
      .data(data, function(d) { return d }) 

  square
    .transition()
    .duration(1000)
    .attr({
      x : function(d, i) { return 0 }  
    })

  square
    .enter()
    .append('rect')
    .attr({
      height : function(d, i) { return 10 },
      y      : function(d, i) { return i * 15 },
      width  : function(d, i) { return d * 5 },
      x      : function(d, i) { return 0 }
    });

  square
    .exit()
    .remove();
 } 

buildChart(data);

setTimeout(function() {
  buildChart(data_two)
}, 1000)
jsfiddle:


我期望的结果是,在一秒钟的延迟后,将这些条平滑地设置为新的宽度。相反,他们只是跳转到新的状态,我不知道为什么。提前谢谢

你是
buildChart
函数总是放置新的条形图,它从不根据
data\u two
中的数据更新你用
data
放置的条形图。要解决此问题,请首先使用
数据
附加矩形,然后选择它们并应用转换:

var h = 500;
var w = 500;

var data = [
  10,
  15,
  12,
  9,
  3
]

var data_two = [
  6,
  15,
  20,
  19,
  11
]

var vis = d3.select('body')
  .append('svg')
  .attr({
    height: 500,
    width: 500
  })
  .append('g');

vis.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr({
        x: function(d, i){ return 0;},
        y: function(d, i){ return i * 15;},
        height: function(d){ return 10;},
        width: function(d){ return d * 5;}
    })

vis.selectAll('rect')
  .data(data_two)
  .transition()
  .duration(1000)
  .delay(1000)
  .attr({
     x: function(d, i){ return 0;},
     y: function(d, i){ return i * 15;},
     height: function(d){ return 10;},
     width: function(d){ return d * 5;}
  });

这里有一个有效的

你在
构建图表
功能总是放置新的条形图,它从不根据
data\u two
中的数据更新你用
数据
放置的条形图。要解决此问题,请首先使用
数据
附加矩形,然后选择它们并应用转换:

var h = 500;
var w = 500;

var data = [
  10,
  15,
  12,
  9,
  3
]

var data_two = [
  6,
  15,
  20,
  19,
  11
]

var vis = d3.select('body')
  .append('svg')
  .attr({
    height: 500,
    width: 500
  })
  .append('g');

vis.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr({
        x: function(d, i){ return 0;},
        y: function(d, i){ return i * 15;},
        height: function(d){ return 10;},
        width: function(d){ return d * 5;}
    })

vis.selectAll('rect')
  .data(data_two)
  .transition()
  .duration(1000)
  .delay(1000)
  .attr({
     x: function(d, i){ return 0;},
     y: function(d, i){ return i * 15;},
     height: function(d){ return 10;},
     width: function(d){ return d * 5;}
  });

这里有一个有效的

你在
构建图表
功能总是放置新的条形图,它从不根据
data\u two
中的数据更新你用
数据
放置的条形图。要解决此问题,请首先使用
数据
附加矩形,然后选择它们并应用转换:

var h = 500;
var w = 500;

var data = [
  10,
  15,
  12,
  9,
  3
]

var data_two = [
  6,
  15,
  20,
  19,
  11
]

var vis = d3.select('body')
  .append('svg')
  .attr({
    height: 500,
    width: 500
  })
  .append('g');

vis.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr({
        x: function(d, i){ return 0;},
        y: function(d, i){ return i * 15;},
        height: function(d){ return 10;},
        width: function(d){ return d * 5;}
    })

vis.selectAll('rect')
  .data(data_two)
  .transition()
  .duration(1000)
  .delay(1000)
  .attr({
     x: function(d, i){ return 0;},
     y: function(d, i){ return i * 15;},
     height: function(d){ return 10;},
     width: function(d){ return d * 5;}
  });

这里有一个有效的

你在
构建图表
功能总是放置新的条形图,它从不根据
data\u two
中的数据更新你用
数据
放置的条形图。要解决此问题,请首先使用
数据
附加矩形,然后选择它们并应用转换:

var h = 500;
var w = 500;

var data = [
  10,
  15,
  12,
  9,
  3
]

var data_two = [
  6,
  15,
  20,
  19,
  11
]

var vis = d3.select('body')
  .append('svg')
  .attr({
    height: 500,
    width: 500
  })
  .append('g');

vis.selectAll('rect')
    .data(data)
    .enter()
    .append('rect')
    .attr({
        x: function(d, i){ return 0;},
        y: function(d, i){ return i * 15;},
        height: function(d){ return 10;},
        width: function(d){ return d * 5;}
    })

vis.selectAll('rect')
  .data(data_two)
  .transition()
  .duration(1000)
  .delay(1000)
  .attr({
     x: function(d, i){ return 0;},
     y: function(d, i){ return i * 15;},
     height: function(d){ return 10;},
     width: function(d){ return d * 5;}
  });

这是一个工作的

数据
只有4个参数?D3应该考虑到这一差异。此外,如果你让他们即使过渡仍然不起作用。你希望发生什么样的过渡?您已经将x设置为0,并且您正在将x设置为0,它将不会移动任何数据。
数据
只有4个参数?D3应该考虑到这一差异。此外,如果你让他们即使过渡仍然不起作用。你希望发生什么样的过渡?您已经将x设置为0,并且您正在将x设置为0,它将不会移动任何数据。
数据
只有4个参数?D3应该考虑到这一差异。此外,如果你让他们即使过渡仍然不起作用。你希望发生什么样的过渡?您已经将x设置为0,并且您正在将x设置为0,它将不会移动任何数据。
数据
只有4个参数?D3应该考虑到这一差异。此外,如果你让他们即使过渡仍然不起作用。你希望发生什么样的过渡?您已经将x设置为0,并且您正在将x设置为0,因此它不会移动。