使用d3.legend强制布局的交互式图例

时间:2015-11-20 04:32:36

标签: javascript csv d3.js legend

我希望创建一个互动传奇。我正在处理从.csv文件填充的强制定向图。我希望鼠标悬停在图例上时突出显示节点。我正在使用由Susie Lu创建的d3.legend库作为我的传奇。

我还在测试,每当我将鼠标悬停在节点上时,其他具有相同大小的节点都会突出显示。但是,它不起作用。我注意到之前由Mike Bostock提供的示例,例如//bl.ocks.org/mbostock/3087986。我也提到了Mike Bostok对类似问题的回答stackoverflow.com/questions/11206015/clicking-a-node- in-d3-from-a-button-outside-the-svg / 11211391#11211391但没有成功。 Ulimately我希望我的Force Layout看起来像这样bl.ocks.org/Guerino1/raw/2879486/任何人都可以指出我的noob错误吗?

        var node = svg.selectAll(".node")
      .data(graph.nodes)
    .enter().append("g")
      .attr("r", function(d) { return d.size; })
       .attr("class", function(d) { return "node " + d.size; })
      .style("fill", function (d) { return color(d.group); })
      .on("mouseover", function(d) { highlight(d.size); });

            node.append("circle")
                    .style("fill", function(d) { return color(d.group); })
                    .attr("r",function(d) { return d.size; });

function highlight(type) {
   if (type == null) d3.selectAll(".node").classed("active", false);
   else d3.selectAll(".node." + type).classed("active", true);
}

有关完整编码,请参阅http://jsfiddle.net/rajaiskandar/os8622yb/。有什么办法可以将我的.csv文件上传到jsfiddle吗?我已经定制了les_mis.csv。

这就是目前的样子

print screen of the force layout

提前谢谢

2 个答案:

答案 0 :(得分:1)

至少有一个问题是CSS类不能以数字开头(在你的情况下,5,10,15等是包含圆圈的组的类名)。请参阅the CSS specification

以下是具体的引用:

  

在CSS中,标识符(包括元素名称,类和ID)   选择器)只能包含字符[a-zA-Z0-9]和ISO 10646   字符U + 00A1和更高,加上连字符( - )和下划线   (_);它们不能以数字开头,也不能以数字后跟连字符开头。   标识符还可以包含转义字符和任何ISO 10646   字符作为数字代码(参见下一项)。例如,   标识符" B& W?"可以写成" B \& W \?"或" B \ 26 W \ 3F"。

另一个问题是(大概)你想要定位圈子本身而不是整个群体,它们具有类.node.15。假设您将数字类更改为以下划线开头。然后d3.selectAll(" .node._15")将使用大小为15的圆圈定位所有组。然后,您可以通过将高亮显示功能中的第二行替换为以下内容来定位圆圈:

d3.selectAll(".node._" + type.size + ">circle")

最后一件事(我认为)是因为CSS特异性,使用类.node.active定位项目不会覆盖直接添加到html中的元素的样式。取代"风格"通过" attr"当你定义svg元素的填充颜色时,应该解决这个问题。

这有用吗? http://plnkr.co/edit/6E0fkDWS87jYi4zbyPnd?p=preview

答案 1 :(得分:0)

如果您使用开发人员工具(例如firebug)分析代码,当您将鼠标悬停在其中一个节点上时,会收到此错误消息:

Uncaught SyntaxError: Failed to execute 'querySelectorAll' on 'Document': '.node.5' is not a valid selector.

圈子没有正确的css类。

此外,您正在将未定义的内容传递到突出显示功能中。尝试使用高亮(d)而不是高亮(d.size)。