説明
D3.jsのバブルチャートの円と円の間隔を指定するにはd3.layout.pack()としてパックレイアウトを生成する際にpadding()メソッドを使います。padding()メソッドのパラメーターに数値を指定すれば、それが円と円の間隔(余白)になります。
これ以外のバブルチャート(パックレイアウト)の説明に関しては
こちらのページを参照してください。
HTMLソース
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>D3.js サンプル</title>
<link rel="stylesheet" href="css/main.css">
<script src="http://d3js.org/d3.v3.min.js" charset="utf-8"></script>
</head>
<body>
<h1>D3.jsサンプル</h1>
<div id="myGraph"></div>
<script src="js/sample.js"></script>
</body>
</html>
JavaScriptコード
var list = { // 長野県塩尻市の世帯数(2010年)
"name": "長野県",
"children": [
{
"name": "塩尻市",
"children": [
{ "name": "大 門", "households": 4042 },
{ "name": "塩尻東", "households": 2599 },
{ "name": "片 丘", "households": 1257 },
{ "name": "高 出", "households": 3081 },
{ "name": "広 丘", "households": 5452 },
{ "name": "吉 田", "households": 4081 },
{ "name": "洗 馬", "households": 1590 },
{ "name": "宗 賀", "households": 2022 },
{ "name": "北小野", "households": 706 },
{ "name": "楢 川", "households": 1016 }
]
}
]
};
var svgWidth = 320; // SVG領域の横幅
var svgHeight = 240; // SVG領域の縦幅
var diameter = 200; // 一番大きい円のサイズ
var color = ["none", "red", "blue", "orange", "purple", "green", "cyan", "gray", "#ff8080", "#a0ff80", "#4090ff"];
var svg = d3.select("#myGraph").append("svg")
.attr("width", svgWidth).attr("height", svgHeight)
var bubble = d3.layout.pack()
.size([diameter, diameter]) // 表示サイズを指定
.padding(20) // 円と円の間の余白を指定
svg.selectAll("circle") // 円を対象にする
.data(bubble.nodes(classes(list))) // データを読み込む
.enter()
.append("circle") // 円を生成する
.attr("r", function(d){ // 円を指定した半径にする
return d.r;
})
.attr("transform", function(d) { // 円のX,Y座標を設定
return "translate(" + d.x + "," + d.y + ")";
})
.attr("fill", function(d,i){
return color[i];
})
// 階層化されたJSONデータをフラット化する (D3.js本家のを少し変更して利用)
function classes(root) {
var classes = [];
function recurse(name, node) {
if (node.children) node.children.forEach(function(child) { recurse(node.name, child); });
else classes.push({packageName: name, className: node.name, value: node.households});
}
recurse(null, root);
return {children: classes};
}