我从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