我從d3.js開始,嘗試創建一個節點行,每個節點包含一個居中的數字標籤。將標籤放置在d3.js節點的中心
我能夠以可視方式產生所需的結果,但是我做到這一點的方式幾乎不是最佳的,因爲它涉及硬編碼每個文本元素的x-y座標。下面是代碼:
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;
});
的node
類是我爲circle
元素單獨定義自定義CSS類,而類nodes
和labels
沒有明確定義,他們是從這個answer借來的。
如圖所示,每個文本標籤的位置都是硬編碼的,因此它出現在每個節點的中心。顯然,這不是正確的解決方案。
我的問題是,我應該如何正確地將每個文本標籤與每個節點圓圈動態關聯,以便如果標籤的位置隨着圓的位置自動變化。代碼示例非常歡迎概念性解釋。
錨文本似乎沒有直接D3工作還沒有,但你嘗試作爲CSS文本對齊簡單的東西?這應該做的伎倆! http://www.w3schools.com/cssref/pr_text_text-align.asp另請嘗試查看d3 Google羣組中的這類帖子:https://groups.google.com/forum/#!searchin/d3 -js/text-align/d3-js/M6a-97ajkWs/rHJV4_WrhX0J%5B1-25%5D – paxRoman 2012-08-08 08:39:59
你在哪裏得到文字定位符在d3中不起作用的想法? – 2012-08-08 13:56:54
幾個月前,他們沒有工作......感謝澄清:)很高興看到這個問題的簡單方法 – paxRoman 2012-08-08 14:51:37