我正在尝试完成动态创建这些蓝色弧线的 d3 项目的最后一点,我需要在其上放置弧线文本,如下图所示:
上面的图像是我通过反复试验静态放置弧文本完成的,但我想根据文本下方的蓝色弧动态放置它。这是动态创建弧的代码:
var groupData = data_group.selectAll("g.group")
.data(nodes.filter(function(d) { console.log(d.__data__.key); return (d.key=='Employers' ||{exp:channel:entries category="13" backspace="2"} d.key == '{url_title}' ||{/exp:channel:entries}) && d.children; }))
.enter().append("group")
.attr("class", "group");
arc_group.selectAll("g.arc")
.data(groupData[0])
.enter().append("svg:path")
.attr("d", groupArc)
.attr("class", "groupArc")
.style("fill", "#1f77b4")
.style("fill-opacity", 0.5);
{exp:} 内容是我从表达式引擎中的内容管理系统中提取的预解析数据,如果它看起来令人困惑。
所以,我有我的弧线。现在您会在 groupData 代码块中注意到我有一个 console.log 语句,它会给我我想要出现在弧文本中的名称:
console.log(d.__data__.key);
现在,我用来静态放置弧文本的代码是这样的:
var arcData = [
{aS: 0, aE: 45,rI:radius - chartConfig.linePadding + chartConfig.arcPadding,rO:radius - chartConfig.linePadding + chartConfig.textPadding-chartConfig.arcPadding}
];
var arcJobsData = d3.svg.arc().innerRadius(arcData[0].rI).outerRadius(arcData[0].rO).startAngle(degToRad(1)).endAngle(degToRad(15));
var g = d3.select(".chart").append("svg:g").attr("class","arcs");
var arcJobs = d3.select(".arcs").append("svg:path").attr("d",arcJobsData).attr("id","arcJobs").attr("class","arc");
g.append("svg:text").attr("x",3).attr("dy",15).append("svg:textPath").attr("xlink:href","#arcJobs").text("JOBS").attr("class","arcText"); //x shifts x pixels from the starting point of the arc. dy shifts the text y units from the top of the arc
在上面的代码中,我唯一需要做的就是为弧动态分配一个 ID,然后在 xlink:href 属性中引用该 ID,并将 text("JOBS") 替换为 text从 d 中提取。数据__key。鉴于上面动态创建弧的代码,并且鉴于我知道如何使用 d.__data .key 动态创建和检索要放置在弧中的文本,我应该能够完成这件事,但我可以不知道如何在 d3 中编写代码来获取数据并将其放置在弧中。有人可以帮忙吗?