2013-05-15 29 views
14

Tôi đang sử dụng bố cục lực để đại diện cho mạng không được chỉ định. nguồn cảm hứng của tôi xuất phát từ ví dụ sau: http://bl.ocks.org/mbostock/1153292Bố cục lực d3.js có cho phép liên kết động không?

enter image description here

Vấn đề của tôi là trong trường hợp của tôi có nhiều hơn nữa liên kết giữa các nút và tôi có cảm giác rằng đưa ra một linkDistance cố định, mà luôn luôn là như nhau, là một ràng buộc rất lớn cho bố cục của tôi.

Có thể đặt số động linkDistance, sao cho một liên kết tăng chiều dài nếu hữu ích để giảm liên kết băng qua bên trong biểu đồ?

Trả lời

14

Từ the documentation:

force.linkDistance ([khoảng cách])

Nếu khoảng cách được chỉ định, thiết lập khoảng cách mục tiêu giữa các nút liên quan đến giá trị quy định. Nếu khoảng cách không được chỉ định, trả về khoảng cách liên kết hiện tại của bố cục, mặc định là 20. Nếu khoảng cách là hằng số thì tất cả các liên kết đều có cùng khoảng cách. Nếu không, nếu khoảng cách là hàm, thì hàm được đánh giá cho mỗi liên kết (theo thứ tự), được chuyển liên kết và chỉ mục của nó, với ngữ cảnh này làm bố cục lực; giá trị trả về của hàm sau đó được sử dụng để đặt khoảng cách của mỗi liên kết. Hàm được đánh giá bất cứ khi nào bố cục bắt đầu. Thông thường, khoảng cách được chỉ định bằng pixel; tuy nhiên, các đơn vị tùy ý liên quan đến kích thước của bố cục.

Lưu ý rằng khoảng cách liên kết vẫn được điều chỉnh khi bố cục chạy. Bạn cũng có thể tìm thấy cài đặt linkStrength() hữu ích.

+0

Vì vậy, bạn có nghĩa là liên kếtChuyển đổi đang thay đổi trong khi thuật toán đang chạy. Tôi không biết. Do một liên kếtStrength bằng 1 có nghĩa là khoảng cách giữa các nút sẽ không thay đổi? –

+0

Không, bố cục lực sẽ luôn điều chỉnh khoảng cách (ít nhất là khả năng) để thỏa mãn các ràng buộc khác. –

+1

Vậy ý nghĩa của linkStrenght là gì? Tôi không thể hiểu được "độ cứng" là gì, nếu tôi nhận thấy rằng một linkStrenght thấp hơn sẽ giúp tôi rất nhiều. –

6

Chỉ cần hai bước sau:

Bước 1: Thêm một tham số trong json chính như sau:

{nguồn: "Microsoft", mục tiêu: "Amazon", gõ: "Cấp giấy phép", giá trị: 60} , {nguồn: "Microsoft", mục tiêu: "HTC", nhập: "cấp phép", giá trị: 60}, {nguồn: "Samsung", mục tiêu: "Apple", nhập: "phù hợp", giá trị: 60} ,

Bước 2: Cập nhật phương thức liên kết để chấp nhận.

.linkDistance(function(d) { return d.value; })