フォーチュン500データのインタラクティブなバブルチャートを作成しています。選択範囲を減らしようとしていますが、期待どおりに機能しない理由がわかりません。
var bubble = d3.layout.pack()
...
d3.json("js/data/fortune2009.json", function(json) {
var node = svg.data([json]).selectAll("g.node")
.data(bubble.nodes); // filter here?
node.enter()
.append("g")
.attr("class", "node")
.attr("transform", function(d) { return "translate(" + d.x + "," + d.y + ")"; });
node.append("circle")
.attr("r", function(d) { return d.r; })
.attr("class", function(d) { return "q" + color(d.Profit) + "-9"; });
node.filter(function(d) { return !d.children; })
.append("text")
.attr("dy", ".3em")
.style("text-anchor", "middle")
.text(function(d) { return d.Company.substring(0, d.r / 3); });
});
JSONデータは次のようになります。
{
"children":[
{
"Year" : "2009",
"Rank" : "1",
"Revenue" : "442",
"Profit" : "851.00",
"Company" : "Exxon Mobil"
},
....
}
親ノードを削除したい。ここで説明するようなフィルター関数を使用しようとしています。
.filter(function(d) { return !d.children; })
しかし、選択を初期化するフィルター関数を追加すると、node
何も起こらないか、エラーが発生します。
(フィルターは、テキストを追加する前に適用すると機能します)
どうすればこれを解決できますか?
更新:これが私の問題を示すJSFIDDLEhttp : //jsfiddle.net/B9w4N/8/です。