2013-01-07 54 views
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.selectAl得到原始数据的控制l('rects.original')

回答

0

如果您选择“rects.original”并将数据绑定到该数据,则使用Update,Exit和Enter选项创建一个连接。林不知道我完全理解你想达到什么样的,但如果你想新数据独立抽取旧rects和数据,你必须创建一个新的选择吧:

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

和绘制。 请注意SVG中的重叠意味着底层元素不会再显示。我不确定你的意思是“控制原始数据”,它仍然绑定到你绑定它的选择。如果要修改它,则必须修改数据,重新绑定它,然后在更新选择上应用转换。