Есть lots of examples, показывающий, как добавить метки к граф и дерево визуализации, но я бы, вероятно, начать с этим, как наиболее простой:
Вы не разместил ссылку на ваш код, но я предполагаю, что node
относится к выбору элементов окружения SVG. Вы не можете добавлять текстовые элементы в элементы окружности, потому что элементы окружности не являются containers; добавление текстового элемента в круг будет проигнорировано.
Обычно вы используете элемент G для группировки элемента окружности (или элемента изображения, как указано выше) и текстового элемента для каждого узла. Полученная структура выглядит следующим образом:
<g class="node" transform="translate(130,492)">
<circle r="4.5"/>
<text dx="12" dy=".35em">Gavroche</text>
</g>
Используйте data-join для создания элементов G для каждого узла, а затем использовать selection.append, чтобы добавить круг и текстовый элемент для каждого. Что-то вроде этого:
var node = svg.selectAll(".node")
.data(nodes)
.enter().append("g")
.attr("class", "node")
.call(force.drag);
node.append("circle")
.attr("r", 4.5);
node.append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.text(function(d) { return d.name });
Одним из недостатков этого подхода заключается в том, что вы можете метки быть нарисованы на вершине кругов. Поскольку SVG еще не поддерживает z-индекс, элементы рисуются в порядке документа; поэтому приведенный выше подход вызывает нанесение метки над ее кругом, но ее можно нарисовать под другими кругами. Вы можете исправить это с помощью двух данных соединений и создания отдельных групп для кругов и меток, например, так:
<g class="nodes">
<circle transform="translate(130,492)" r="4.5"/>
<circle transform="translate(110,249)" r="4.5"/>
…
</g>
<g class="labels">
<text transform="translate(130,492)" dx="12" dy=".35em">Gavroche</text>
<text transform="translate(110,249)" dx="12" dy=".35em">Valjean</text>
…
</g>
И соответствующий JavaScript:
var circle = svg.append("g")
.attr("class", "nodes")
.selectAll("circle")
.data(nodes)
.enter().append("circle")
.attr("r", 4.5)
.call(force.drag);
var text = svg.append("g")
.attr("class", "labels")
.selectAll("text")
.data(nodes)
.enter().append("text")
.attr("dx", 12)
.attr("dy", ".35em")
.text(function(d) { return d.name });
Этот метод используется в Mobile Patent Suits примере (с дополнительным текстовым элементом, используемым для создания белой тени).
Хотя эта ссылка может ответить на вопрос, лучше включить здесь основные части ответа и предоставить ссылку для справки. Ответные ссылки могут стать недействительными, если связанная страница изменится. – Whymarrh
@Whymarrh ответ обновлен –