Có lots of examples cho thấy làm thế nào để thêm nhãn để vẽ đồ thị và visualizations cây, nhưng tôi có thể bắt đầu với một này là đơn giản nhất:
Bạn chưa đăng tải một liên kết với mã của bạn, nhưng tôi đoán rằng node
đề cập đến việc lựa chọn các phần tử vòng tròn SVG. Bạn không thể thêm yếu tố văn bản vào các yếu tố hình tròn vì các phần tử hình tròn không phải là containers; việc thêm phần tử văn bản vào vòng kết nối sẽ bị bỏ qua.
Thông thường bạn sử dụng phần tử G để nhóm phần tử vòng tròn (hoặc phần tử hình ảnh như trên) và phần tử văn bản cho mỗi nút. Cấu trúc kết quả trông như thế này:
<g class="node" transform="translate(130,492)">
<circle r="4.5"/>
<text dx="12" dy=".35em">Gavroche</text>
</g>
Sử dụng một data-join để tạo ra các yếu tố G cho mỗi nút, và sau đó sử dụng selection.append để thêm một vòng tròn và một yếu tố văn bản cho mỗi. Một cái gì đó như thế này:
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 });
Một nhược điểm của phương pháp này là bạn có thể muốn nhãn được vẽ trên đầu vòng tròn. Vì SVG chưa hỗ trợ chỉ mục z, các phần tử được vẽ theo thứ tự tài liệu; do đó, cách tiếp cận trên gây ra nhãn được vẽ phía trên vòng tròn nhưng có thể được vẽ trong các vòng kết nối khác. Bạn có thể khắc phục điều này bằng cách sử dụng hai dữ liệu tham gia và tạo các nhóm riêng biệt cho vòng tròn và nhãn, như vậy:
<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>
Và JavaScript tương ứng:
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 });
Kỹ thuật này được sử dụng trong ví dụ Mobile Patent Suits (với một yếu tố văn bản bổ sung được sử dụng để tạo ra một bóng trắng).
Trong khi liên kết này có thể trả lời câu hỏi, tốt hơn nên bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở thành không hợp lệ nếu trang được liên kết thay đổi. – Whymarrh
@Whymarrh câu trả lời được cập nhật –