私は d3.js から始めて、中央に番号ラベルを含むノードの行を作成しようとしています。
目的の結果を視覚的に生成することはできますが、各テキスト要素の xy 座標をハードコーディングする必要があるため、最適な方法とは言えません。以下はコードです:
var svg_w = 800;
var svg_h = 400;
var svg = d3.select("body")
.append("svg")
.attr("width", svg_w)
.attr("weight", svg_h);
var dataset = [];
for (var i = 0; i < 6; i++) {
var datum = 10 + Math.round(Math.random() * 20);
dataset.push(datum);
}
var nodes = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(dataset)
.enter()
.append("circle")
.attr("class", "node")
.attr("cx", function(d, i) {
return (i * 70) + 50;
})
.attr("cy", svg_h / 2)
.attr("r", 20);
var labels = svg.append("g")
.attr("class", "labels")
.selectAll("text")
.data(dataset)
.enter()
.append("text")
.attr("dx", function(d, i) {
return (i * 70) + 42
})
.attr("dy", svg_h / 2 + 5)
.text(function(d) {
return d;
});
クラスは要素用に個別に定義したカスタム CSS クラスですが、クラスとnode
は明示的に定義されておらず、この回答から借用されています。circle
nodes
labels
ご覧のとおり、各テキスト ラベルの配置は、各ノードの中央に表示されるようにハードコードされています。明らかに、これは正しい解決策ではありません。
私の質問は、ラベルの位置が円の位置とともに自動的に変化するように、各テキスト ラベルを各ノード サークルに動的に正しく関連付けるにはどうすればよいかということです。コード例を使用した概念的な説明は大歓迎です。