Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在节点上显示文本/标签,D3.js力定向图_Javascript_D3.js - Fatal编程技术网

Javascript 在节点上显示文本/标签,D3.js力定向图

Javascript 在节点上显示文本/标签,D3.js力定向图,javascript,d3.js,Javascript,D3.js,我不明白如何在节点上显示文本 我试了好几次都没成功,请帮我解决 我对D3.js一点也不熟悉,但我需要为我的项目可视化一个图形,并且我需要在节点上添加这个额外的功能显示标签 以下是输入文件: { "nodes":[ {"name":"A","group":0}, {"name":"B","group":1}, {"name":"C","group":2}, {"name":"D","group":3}, {"name":"E","group":4} ], "links":[ {"source":

我不明白如何在节点上显示文本 我试了好几次都没成功,请帮我解决

我对D3.js一点也不熟悉,但我需要为我的项目可视化一个图形,并且我需要在节点上添加这个额外的功能显示标签

以下是输入文件:

{
"nodes":[
{"name":"A","group":0},
{"name":"B","group":1},
{"name":"C","group":2},
{"name":"D","group":3},
{"name":"E","group":4}

],
"links":[
{"source":0,"target":1,"value":11},
{"source":0,"target":2,"value":11},
{"source":1,"target":2,"value":21},
{"source":1,"target":3,"value":21},
{"source":1,"target":4,"value":21},
{"source":2,"target":3,"value":21},
{"source":2,"target":4,"value":21},
{"source":3,"target":4,"value":11}
]
}
D3.js代码:

<script type="text/javascript">
    // use print_graph() method to output graph vertices
    main_graph();

    var width = 700,
        height = 300;


    var color = d3.scale.category20();

    var force = d3.layout.force()
        .charge(-120)

        .linkDistance(150)
        .size([width, height]);

    var svg = d3.select("body").append("svg")
        .attr("width", width)
        .attr("height", height)
        .attr("transform", "translate(0,0)");

    d3.json("input.json", function(error, graph) {
        force
            .nodes(graph.nodes)
            .links(graph.links)
            .start();

        var link = svg.selectAll(".link")
            .data(graph.links)
            .enter().append("line")
            .attr("class", "link")
            .style("stroke-width", function(d) {
                return Math.sqrt(d.value);
            });

        var node = svg.selectAll(".node")
            .data(graph.nodes)
            .enter().append("circle")
            .attr("class", "node")
            // size of nodes
            .attr("r", 20)
            .style("fill", function(d) {
                return color(d.group);
            })
            .call(force.drag);



        //I'm stuck here
        var texts = svg.selectAll("text.label")
            .data(graph.nodes)
            .enter().append("text")
            .attr("class", "label")
            .attr("fill", "white")
            .text(function(d) {
                return d.name;
            });

        /*
             // 1st trying
             var text = svg.selectAll("text")
                     .data(graph.node)
                     .enter().append("text")
                     .attr("fill","white")
                      .text(function (d) {return d.name; });
        */

        // another trying
        //node.append("text")
        //.text(function(d) { return d.name; });


        node.append("title")
            .text(function(d) {
                return d.name;
            });

        force.on("tick", function() {
            link.attr("x1", function(d) {
                    return d.source.x;
                })
                .attr("y1", function(d) {
                    return d.source.y;
                })
                .attr("x2", function(d) {
                    return d.target.x;
                })
                .attr("y2", function(d) {
                    return d.target.y;
                });

            node.attr("cx", function(d) {
                    return d.x;
                })
                .attr("cy", function(d) {
                    return d.y;
                });
        });
    });
</script>
添加文本的方式很好,但在force.ontick函数{}处理程序中,您不定位文本:

force.on("tick", function() {
    link.attr("x1", function(d) {
      return d.source.x;
    })
      .attr("y1", function(d) {
        return d.source.y;
      })
      .attr("x2", function(d) {
        return d.target.x;
      })
      .attr("y2", function(d) {
        return d.target.y;
      });

    node.attr("cx", function(d) {
      return d.x;
    })
    .attr("cy", function(d) {
      return d.y;
    });
    texts.attr("x", function(d) { //<-- NEED TO POSITION THESE TOO
      return d.x;
    })
    .attr("y", function(d) {
      return d.y;
    });
 });

这是你的代码。

你能做一些类似小提琴的东西吗?你看到了吗?谢谢,我看到了这个例子,它是有效的。如果有人能告诉我上面代码中的错误在哪里,我将不胜感激。谢谢