【问题标题】:Failed to remove labels from force directed graph无法从力有向图中删除标签
【发布时间】:2013-06-10 03:52:08
【问题描述】:

我尝试在我的力导向图中添加一些标签,但由于某种原因,当我尝试扩展/缩小我的节点集时,我不知道我无法“删除”它们。

我的标签代码如下:

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/

有人可以帮助我吗?

任何帮助将不胜感激。

【问题讨论】:

    标签: svg d3.js


    【解决方案1】:

    看起来这里的问题是您使用data.links 设置标签 - 因此您始终拥有 SVG 中所有链接的所有标签。您看不到它们的唯一原因是,如果它们的组没有展开,xy 属性将设置为 NaN,因此标签不在屏幕上。展开后,将设置 xy 值;收缩会阻止它们更新,但 data.links 数组不会改变,因此不会删除任何内容。

    【讨论】:

    • 这是 :-/ 感谢您的提示!
    猜你喜欢
    • 2016-08-31
    • 1970-01-01
    • 2020-01-22
    • 1970-01-01
    • 1970-01-01
    • 2019-04-23
    • 2023-03-18
    • 2019-10-11
    • 2017-03-03
    相关资源
    最近更新 更多