D3 を使用して記述できる SVG の数に制限はありません。D3 が行うことは、DOM にアクセスして、ブラウザが SVG の描画方法や SVG の操作方法を認識できるように変更することだけです。D3 を使用すると、要素に簡単にアクセスして操作することができます。
JSON オブジェクトから SVG を読み取る場合は、複数の JSONS を読み取るだけで済みます。
例として、D3js.org Web サイトの最初の 2 つの例を取り上げます...
d3.csv("morley.csv", function(error, csv) {
var data = [];
csv.forEach(function(x) {
var e = Math.floor(x.Expt - 1),
r = Math.floor(x.Run - 1),
s = Math.floor(x.Speed),
d = data[e];
if (!d) d = data[e] = [s];
else d.push(s);
if (s > max) max = s;
if (s < min) min = s;
});
chart.domain([min, max]);
var svg = d3.select("body").selectAll("svg")
.data(data)
.enter().append("svg")
.attr("class", "box")
.attr("width", width + margin.left + margin.right)
.attr("height", height + margin.bottom + margin.top)
.append("g")
.attr("transform", "translate(" + margin.left + "," + margin.top + ")")
.call(chart);
d3.select("button").on("click", function() {
svg.datum(randomize).call(chart.duration(1000)); // TODO automatic transitions
});
});
これは、箱ひげ図の例から、「morley.csv」を開いてデータを操作します。
d3.json("flare.json", function(error, root) {
var node = svg.selectAll(".node")
.data(bubble.nodes(classes(root))
.filter(function(d) { return !d.children; }))
.enter().append("g")
.attr("class", "node")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
node.append("title")
.text(function(d) { return d.className + ": " + format(d.value); });
node.append("circle")
.attr("r", function(d) { return d.r; })
.style("fill", function(d) { return color(d.packageName); });
node.append("text")
.attr("dy", ".3em")
.style("text-anchor", "middle")
.text(function(d) { return d.className.substring(0, d.r / 3); });
});
これは、バブル チャートの例から、「flare.json」を開き、それを使って処理を開始します。これらの両方のアクションを同じファイルで実行することを妨げるものは何もありません。
他のプログラムと同様に、変数参照に注意する必要があります。各 SVG には独自の参照が必要です。上記の 2 つのコード ブロックは、いくつかの目的で同じ変数名を使用しているため、相互に影響を及ぼします。1 つのページにこれらの両方が必要な場合は、変数が一意になるように変数の名前を変更するだけで済みます。