2013-06-18 4 views
0

Я очень новичок в D3, так что в основном собираюсь множество примеров и проблем, чтобы попробовать. У меня есть json, который выглядит так:как напечатать имя ключевое поле внутри круга, используя d3.js

и материал d3 выглядит следующим образом.

<div id="body"> 
     <div id="chart"></div> 
    </div> 
var inNodes = getNodes(); 

var w = 600, 
    h = 400, 
    z = d3.scale.category20c(); 

var force = d3.layout.force() 
     .linkDistance(100) 
     .size([w, h]) 
     .charge(-430); 

var svg = d3.select("#chart").append("svg:svg") 
    .attr("width", w) 
    .attr("height", h); 

svg.append("svg:rect") 
    .attr("width", w) 
    .attr("height", h); 

    var nodes = flatten(inNodes), 
     links = d3.layout.tree().links(nodes); 

    force 
     .nodes(nodes) 
     .links(links) 
     .start(); 

    var link = svg.selectAll("line") 
     .data(links) 
    .enter().insert("svg:line") 
     .style("stroke", "#999") 
     .style("stroke-width", "1px"); 

    var node = svg.selectAll("circle.node") 
     .data(nodes) 
    .enter().append("svg:circle") 
     .attr("r", function(d){return d.size*2}) 
     .style("fill", function(d) { return z(d.parent && d.parent.name); }) 
     .style("stroke", "#000") 
     .call(force.drag); 

    force.on("tick", function(e) { 
    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; }); 
    }); 


function flatten(root) { 
    var nodes = []; 
    function recurse(node, depth) { 
    if (node.children) { 
     node.children.forEach(function(child) { 
     child.parent = node; 
     recurse(child, depth + 1); 
     }); 
    } 
    node.depth = depth; 
    nodes.push(node); 
    } 
    recurse(root, 1); 
    return nodes; 
} 

Я получаю немного потерянный в синтаксисе здесь. Так что вам нужна помощь. Я пытаюсь напечатать имя каждого узла внутри узла.

function getNodes() { 

var inNodes = { 
    "name": "APP", 
    "children": [ 
     { 
     "name": "API 1", 
     "size": 10 
     }, 
     { 
     "name": "API 2", 
     "size": 10 
     }, 
     { 
     "name": "API 3", 
     "size": 10, 
     } 
    ], 
    "size":20 
}; 

return inNodes; 
} 

Я просмотрел целую кучу примеров, но не совсем понял, как все происходит.

ответ

0

См: http://tributary.io/inlet/5809527

Вы должны append в SVG text элемент для каждой точки данных. Затем в функции tick() вы устанавливаете атрибут "dx""dy") текста таким же, как атрибут "cx""cy") круга.

+0

@ elsherbini-- правый сверху. Благодарю. Отлично – soum

Смежные вопросы