您可以嘗試使用d3.scale.linear()有一個固定的,手動設置輸入域和輸出範圍,你的任意數據映射到一致,可預測值。
例子:
function getSize(d){ return d.size; }
var params = [
this.aggregatedDataFromAllCharts_beforePacking,
getSize
], dataScale = d3.scale.linear()
.domain([d3.min.apply(window, params), d3.max.apply(window, params)])
.range([0, 1000]);
上漿(根圓)你的包,你可能必須使用第二的規模,這將每個數據集來具體SVG圓半徑的合計值根圓。沿線的一些東西:
var aggregatedSizes = [];
// for all datasets
aggregatedSizes.push(d3.sum(dataset, getSize));
var packSizeScale = d3.scale.linear()
.domain(Math.min(aggregatedSizes), Math.max(aggregatedSizes))
.range(this.minCircleRadius, this.maxCircleRadius);
...其中min-和maxCircleRadius是要顯示的最小和最大圓尺寸。
// for each of your data sets
var packedCircles = d3.layout.pack().nodes(dataset).value(function(d) {
return dataScale(d.size);
}).size([packSizeScale(d3.sum(dataset, getSize) *2)]);
還有一個不錯的tutorial on D3 scales by Scott Murray
我假設你在談論的包佈局。有沒有選擇一致的大小,你必須自己計算半徑。 –