2013-07-06 2 views
0

Я новичок в D3, поэтому я хочу выяснить некоторые из следующих вещей в этом примере макета дерева (http://bl.ocks.org/mbostock/4339083).ССЫЛКИ В Складной Дерево в D3.js

  1. Как добавить имена к ссылкам (ребрам), которые есть, если есть ссылка от A до B (B является дочерним по A), тогда отобразите имя B по ссылке.
  2. Как изменить ширину ссылки в зависимости от размера, указанного в дочернем элементе, то есть, если есть ссылка от A до B, а размер B равен 50, тогда ширина ссылки должна быть 50 пикселей.

Пожалуйста, помогите мне решить эти проблемы, поскольку я не могу понять, как это должно быть сделано.

спасибо.

ответ

2

Для меток, вам необходимо добавить text элементы к дорожкам линии связи:

link.enter().insert("text", "g") 
    .attr("x", function(d) { return (d.source.x+d.target.x)/2; }) 
    .attr("y", function(d) { return (d.source.y+d.target.y)/2; }) 
    .text(function(d) { return d.target.name; }); 

Вы можете настроить позиции на этикетке.

Чтобы изменить ширину линии, вам необходимо установить атрибут stroke-width пути:

link.enter().insert("path", "g") 
    .attr("class", "link") 
    .attr("stroke-width", function(d) { return d.target.size; }) 
    .attr("d", function(d) { 
    var o = {x: source.x0, y: source.y0}; 
    return diagonal({source: o, target: o}); 
    }); 
+0

Спасибо за ваш ответ. Но есть проблема с позиционированием этикеток. чтобы удалить, что мы должны заменить x на y. если это изменение будет выполнено, то позиция точно находится по ссылке. Другая проблема здесь, когда этикетки сформированы .. при формировании новых ярлыков старые ярлыки не удаляются. Я пробовал функцию remove() при удалении текста, но он не работал. вы можете заглянуть в это .. ?? –

+0

Как я уже сказал, вы можете отрегулировать позиции ярлыков. Это должно быть довольно просто. Если вы не покажете мне код, который вы используете для удаления ярлыков, я не могу вам помочь. –

+0

var linktext = svg.selectAll ("text.link") .data (ссылки, функция (d) {return d.target.id;}); linktext.enter(). Append ("текст", "g") .attr ("x", function (d) {return (d.source.y + d.target.y)/2;}) .attr ("y", function (d) {return (d.source.x + d.target.x)/2;}) .attr ("text-anchor", "middle") .text (function (d) {return d.target.size;}); . \t \t linktext.exit() перехода() .duration (длительность) .text (функция (г) {возвращение d.target.size;}) .remove(); –