将ID分配给单个轴文本元素

时间:2012-10-10 18:08:48

标签: d3.js label axis

我正在使用d3.axis()创建轴标签和刻度标记,我想使用d3.select(“#axisTextIDValue”)单独引用但我看不到操纵个人的id属性轴中的文本元素。有谁知道如何为轴的刻度或文本元素创建ID值?

2 个答案:

答案 0 :(得分:7)

虽然另一个答案确实解释了如何选择刻度,但如果要为这些生成的元素分配唯一ID,则可以使用子选择通过为您调用的g提供id或类来执行此操作轴,然后根据子阵列的位置设置子文本元素的ID:

 d3.select("svg").append("g").attr("id", "axisG").call(axis);
 d3.select("#axisG").selectAll("text").attr("id", function(d,i) {return "axisText" + i});

 d3.select("#axisText0").node(); //demonstrates selectability

那说,这可能不是一个好主意,并且有更好的方法来处理由D3即时生成的ticks / labels / voronoi /等,但我想确保放一个回答这里,以防万一有人正在寻找如何做这种事情。

答案 1 :(得分:3)

这个棘手的部分是你不会提前知道你有什么标记或多少(除非你在你的轴上使用tickValues属性)。

通常,您可以对创建轴的组进行分类,并将其用作进一步选择的基础。例如

var axisGroup = parent.append('g')
                .attr('class', 'axis')

axisGroup.call(axis);

我相信刻度线被分配了“tick”类,因此您可以选择所有刻度线:

axisGroup.selectAll('.tick');

或所有文字标签:

axisGroup.selectAll('text');