0

我正在尝试修改在其中一个站点上找到的以下代码,以在图表中显示原始数据和更新数据。我希望更新的数据具有不同的颜色,并且仍然显示原始数据并查看更改。谁能指出我的错误。

<title>d3 example</title> 
<style>

.original{
 fill: rgb(7, 130, 180);
}

.updated{
 fill: rgb(7,200,200);
}

</style>

<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="http://d3js.org/d3.v2.min.js"></script>


<script type="text/javascript">
  // Suppose there is currently one div with id "d3TutoGraphContainer" in the DOM
  // We append a 600x300 empty SVG container in the div
  var chart = d3.select("#d3TutoGraphContainer").append("svg").attr("width", "600").attr("height", "300");

  // Create the bar chart which consists of ten SVG rectangles, one for each piece of data
  var rects = chart.selectAll('rect').data([1 ,4, 5, 6, 24, 8, 12, 1, 1, 20])
                   .enter().append('rect')
                   .attr("stroke", "none")
                   //.attr("fill", "rgb(7, 130, 180)")
                   .attr('class','original')
                   .attr("x", 0)
                   .attr("y", function(d, i) { return 25 * i; } )
                   .attr("width", function(d) { return 20 * d; } )
                   .attr("height", "20");

  // Transition on click managed by jQuery
  rects.on('click', function() {
    // Generate randomly a data set with 10 elements
    var newData = [1,2,3,4];

    //for (var i=0; i<10; i+=1) { newData.push(Math.floor(24 * Math.random())); }

    var newRects = d3.selectAll('rects.original');

    newRects.data(newData)
         .transition().duration(2000).delay(200)
         .attr("width", function(d) { return d * 20; } )
         //.attr("fill", newColor);
         .attr('class','updated');
});
</script>

我想知道我是否可以使用d3.selectAll('rects.original')来控制原始数据

4

1 回答 1

0

如果您选择“rects.original”并将数据绑定到它,您将创建一个包含更新、退出和输入选择的连接。我不确定我是否完全理解您要实现的目标,但如果您希望独立于旧矩形和数据绘制新数据,则必须为其创建一个新选择:

              var newRects = chart.selectAll("rect.new")
                                  .data(newData)
                                  .enter()
                               (...)

并画出来。请注意,SVG 中的重叠意味着基础元素将不再显示。

我不确定您所说的“控制原始数据”是什么意思,它仍然绑定到您绑定到的选择。如果要修改它,则必须修改数据,重新绑定它,然后在更新选择上应用过渡。

于 2013-08-21T10:19:16.367 回答