2016-08-25 43 views
6

enter image description hered3给定半径内的动画气泡图

//气泡图基地。 http://jsfiddle.net/NYEaX/1450/

我想通过改变它们的比例来动画气泡 - 如果可能的话,淡入淡出。在某个阶段,我需要用某种重力将它们聚集在一起,以占据更多的周围环境。

(function() { 

    var diameter = 250; 

    var svg = d3.select('#graph').append('svg') 
     .attr('width', diameter) 
     .attr('height', diameter); 

    var bubble = d3.layout.pack() 
     .size([diameter, diameter]) 
     .value(function(d) { 
     return d.size; 
     }) 
     .padding(3); 

    var color = d3.scale.ordinal() 
     .domain(["Lorem ipsum", "dolor sit", "amet", "consectetur", "adipisicing"]) 
     .range(["#98abc5", "#8a89a6", "#7b6888", "#6b486b", "#a05d56"]); 


    function randomData() { 

     var data1 = { 
     "children": [ 
       { 
        name: "AA", 
        className: "aa", 
        size: 170 
       }, 
       { 
        name: "BB", 
        className: "bb", 
        size: 393 
       }, 
       { 
        name: "CC", 
        className: "cc", 
        size: 293 
       }, 
       { 
        name: "DD", 
        className: "dd", 
        size: 89 
       } 
       ] 
     }; 

     var data2 = { 
     "children": [ 
       { 
        name: "AA", 
        className: "aa", 
        size: 120 
       }, 
       { 
        name: "BB", 
        className: "bb", 
        size: 123 
       }, 
       { 
        name: "CC", 
        className: "cc", 
        size: 193 
       }, 
       { 
        name: "DD", 
        className: "dd", 
        size: 289 
       } 
       ] 
     }; 



      var j = Math.floor((Math.random() * 2) + 1); 
      console.log("j", j); 

      if (j == 1) { 
      return data1; 
      } else { 
      return data2; 
      } 

     } 

    change(randomData()); 

    d3.select(".randomize") 
    .on("click", function() { 
     change(randomData()); 
    }); 

    function change(data) { 
    console.log("data", data); 

    // generate data with calculated layout values 
    var nodes = bubble.nodes(data) 
     .filter(function(d) { 
     return !d.children; 
     }); // filter out the outer bubble 


    var vis = svg.selectAll('circle') 
     .data(nodes); 

    vis.enter() 
     .insert("circle") 
     .attr('transform', function(d) { 
     return 'translate(' + d.x + ',' + d.y + ')'; 
     }) 
     .attr('r', function(d) { 
     return d.r; 
     }) 
     .style("fill", function(d) { 
     return color(d.name); 
     }) 
     .attr('class', function(d) { 
     return d.className; 
     }); 

    vis 
     .transition().duration(1000) 

    vis.exit() 
     .remove(); 

    }; 

    })(); 
+0

我有气泡动画 - 但它仍然不是正确的http://jsfiddle.net/NYEaX/1457/ –

+0

HTTP: //jsfiddle.net/NYEaX/1458/ –

+0

气泡= bubbles.transition() \t \t \t \t \t \t \t .transition() \t \t \t \t \t \t \t .duration(2000) \t \t \t \t \t \t \t .attr( '变换',函数(d){ \t \t \t \t \t \t返回 '翻译(' + DX + '' + DY +' )'; \t \t \t \t \t \t}) \t \t \t \t \t \t \t .attr( 'R',函数(d){ \t \t \t \t \t \t \t //console.log("dr”,DR) \t \t \t \t \t \t return d。R等 \t \t \t \t \t \t}) \t \t \t \t \t \t \t .ease( '弦') –

回答

0

这些动画气泡将成为此整体图表的一部分 - 我需要支持相应地微调动画弧和气泡。所以饼图弧线应该顺利补间 - 和气泡应该淡入/淡出/半径增加/减少半径

enter image description here

最新的小提琴。 http://jsfiddle.net/NYEaX/1505/

http://jsfiddle.net/NYEaX/1506/) - 重构

1. -- how to animate the arcs 
2. -- how to animate the bubbles 
3. -- adding back the randomise button to test with 2 dummy data sets. 

这是老派动画,效果很不错

   /* ------- ANIMATE PIE SLICES -------*/ 
       var slice = doughpie.select(".slices").selectAll("path.slice") 
        .data(pie(data), key); 

       slice.enter() 
        .insert("path") 
        .style("fill", function(d) { 
        return color(d.data.label); 
        }) 
        .style("transform", function(d, i){ 
        //return "translate(0, 0)"; 
        }) 
        .attr("class", "slice"); 

       slice 
        .transition().duration(1000) 
        .attrTween("d", function(d) { 
        this._current = this._current || d; 
        var interpolate = d3.interpolate(this._current, d); 
        this._current = interpolate(0); 
        return function(t) { 
         return arc(interpolate(t)); 
        }; 
        }) 

       slice.exit() 
        .remove(); 
       /* ------- ANIMATE PIE SLICES -------*/ 

//这是当前馅饼弧 - 但是当我尝试和以相同的方式动画派 - 它失败了。

var g = svg.selectAll(".arc") 
    .data(pie(data)) 
    .enter().append("g") 
    .attr("class", "arc"); 

g.append("path") 
    .attr("d", arc) 
    .style("fill", function(d) { 
    return color(d.data.label); 
    }); 

arc 
    .outerRadius(radius - 10) 
    .innerRadius(0); 
+0

- 任何人都可以帮助这个? –

0

尝试和第一动画饼图,然后查看泡沫动画