我尝试在力导向图中添加一些标签,但出于某种原因,当我尝试扩展/缩小节点集时,我不知道我不能“删除”它们。
我的标签代码如下:
var labels = labelg.selectAll('text .textlabel').data(data.links);
labels.exit().remove();
labels.enter().append('text')
.attr('class','textlabel')
.attr("x", function(d) {return d.size ? (d.source.group_data.x + d.target.group_data.x) / 2 : (d.source.x + d.target.x)/2 ;})
.attr("y", function(d) { return (d.size ? (d.source.group_data.y + d.target.group_data.y) / 2 : (d.source.y + d.target.y))/2 ; })
.attr("text-anchor", "middle")
.text(function(d) {return d.reason;});
在我的“tick”功能中,我的定位如下
force.on("tick", function() {
//... node & link stuff ...
labels
.attr("x", function(d) { return (d.size ? (d.source.group_data.x + d.target.group_data.x) / 2 : (d.source.x + d.target.x)/2) ; })
.attr("y", function(d) { return (d.size ? (d.source.group_data.y + d.target.group_data.y) / 2 : (d.source.y + d.target.y))/2 ; });
});
现在,如果我点击一个节点,该组将展开并显示节点之间的标签。但是,如果我展开第二组和/或收缩第一组,则不会删除标签。
为了更好地理解我的问题,我做了一个小提琴http://jsfiddle.net/NVmf5/
有人可以帮助我。
任何帮助都将不胜感激。
答案 0 :(得分:1)
此处的问题似乎是您使用data.links
设置标签 - 因此您始终拥有SVG中所有链接的所有标签。您没有看到它们的唯一原因是,如果未展开其组,则x
和y
属性设置为NaN
,因此标签位于屏幕外。展开后,会设置x
和y
值;收缩使他们无法更新,但data.links
数组不会改变,因此不会删除任何内容。