2013-08-10 1 views
33

Я пытаюсь добавить текстовую метку к узлам в диаграмме с плавающей запятой d3, похоже, проблема. Это мой Fiddle:Добавить текстовую метку к узлу d3 в силовом направлении График и изменить размер при наведении

enter image description here

Когда я добавляю имя узла, как это:

node.append("text") 
    .attr("class", "word") 
    .attr("dy", ".35em") 
    .text(function(d) { 
     console.log(d.name); 
     return d.name; 
    }); 

Там нет никаких изменений, но имена становятся вошли.

Когда я попытался использовать bounding box, появились метки узлов, но узлы уложены вверху в верхнем левом углу окна, в то время как ссылки на узлы прекрасны. Это fiddle является результатом этого усилия, которое я вставляю. мне, что я делаю неправильно?

ответ

54

Вы добавляете текстовый элемент в круг, который не будет работать. Вы можете добавлять группы под элементом SVG, а затем добавьте круг и текст в каждой группе:

// Create the groups under svg 
var gnodes = svg.selectAll('g.gnode') 
    .data(graph.nodes) 
    .enter() 
    .append('g') 
    .classed('gnode', true); 

// Add one circle in each group 
var node = gnodes.append("circle") 
    .attr("class", "node") 
    .attr("r", 5) 
    .style("fill", function(d) { return color(d.group); }) 
    .call(force.drag); 

// Append the labels to each group 
var labels = gnodes.append("text") 
    .text(function(d) { return d.name; }); 

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

    // Translate the groups 
    gnodes.attr("transform", function(d) { 
    return 'translate(' + [d.x, d.y] + ')'; 
    });  

}); 

Вилком вашей скрипки с этой стратегией является here

+3

Довольно много, что я хотел, пришлось отредактировать бит для изменения размера при зависании. Большое спасибо. – Aditya

+1

Я знаю, что это сообщение устарело, но обратите внимание, что .call (force.drag) должен быть на gnodes, а не на узле. – Aaron

+3

Использование 'call (force.drag)' на 'gnodes' позволит пользователю перетаскивать метки или круги (все под группами), тогда как использование их в' node' позволяет только перетаскивать круги. –

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

  • Нет связанных вопросов^_^