2016-04-14 39 views

回答

4

這是如何製作矩形而不是圓形。

node.append("rect") 
     .attr("width", function(d) { return d.r*2; })//width is the diameter 
     .attr("x", function(d) { return d.r*-1; }) 
     .attr("y", function(d) { return d.r*-1; }) 
     .attr("height", function(d) { return d.r*2; })//height is the diameter 
     .style("fill", function(d) { return color(d.packageName); }); 

我們創造出包個個

//get all the data 
    var data = d3.selectAll("g")[0].map(function(d) { 
    return d3.select(d).data()[0] 
    }) 
    //get the min x max x min y max y 
    var xmin = d3.min(data, function(d){return d.x-d.r}) 
    var xmax = d3.max(data, function(d){return d.x+d.r}) 
    var ymin = d3.min(data, function(d){return d.y-d.r}) 
    var ymax = d3.max(data, function(d){return d.y+d.r}) 

    //make a rectangle to make it over other rectangles. 
    svg.insert("rect" ,":first-child") 
    .attr("x", xmin) 
    .attr("y", ymin) 
    .attr("height", ymax-ymin) 
    .attr("width", xmax-xmin) 
    .style("opacity", 0.3) 
    .style("fill","blue"); 

的工作示例here

+0

感謝您的矩形。所有這些小矩形都需要被包圍在一個大的矩形中,在你的例子中,所有的小矩形都是重疊的,而不是等距的。 – user123

+0

對不起。粘貼上面的代碼將它們包裝在一個大矩形中。它工作正常。 – user123

+0

矩形之間的間距可以像這樣改變填充varchar = d3.layout.pack() .sort(null) .size([diameter,diameter]) .padding(25.5);'此處的工作代碼http://plnkr.co/edit/Ku250M0PeRutyQU4VJxn?p=preview – Cyril