長方形内の異なるサイズの円の密集を見つけることが主な関心事である場合、残念ながら、新しいd3レイアウトを実装する必要があります。これを行うプラグインが既に作成されていることを知りません。
ただし、探しているのが長方形への古いパッキングである場合は、d3 が提供する既存の円パッキング アルゴリズムを使用できますd3.layout.pack
。このレイアウトの境界を指定すると、長方形の寸法が指定されます。次に d3 は、外接する四角形が外接する円を決定し、その円を使用して階層データのルートを視覚化します。したがって、実際にはレンダリングしない「ダミー」ルート ノードを提供し、視覚化する実際のデータをそのノードの子にすることができます。
以下にコード例を示します。また、bl.ocks.orgにも掲載したので、実際の動作を確認できます。
var w = 640,
h = 480;
var data = {
name : "root",
children : [
{ name: '1', size: 100 }, { name: '2', size: 85 },
{ name: '3', size: 70 } , { name: '4', size: 55 },
{ name: '5', size: 40 } , { name: '6', size: 25 },
{ name: '7', size: 10 } ,
]
}
var canvas = d3.select("#canvas")
.append("svg:svg")
.attr('width', w)
.attr('height', h);
var nodes = d3.layout.pack()
.value(function(d) { return d.size; })
.size([w, h])
.nodes(data);
// Get rid of root node
nodes.shift();
canvas.selectAll('circles')
.data(nodes)
.enter().append('svg:circle')
.attr('cx', function(d) { return d.x; })
.attr('cy', function(d) { return d.y; })
.attr('r', function(d) { return d.r; })
.attr('fill', 'white')
.attr('stroke', 'grey');