2013-12-17 35 views
5

Tôi muốn làm điều gì đó hơi khác thường với bố trí lực (để hiển thị đồ thị). Chòm sao và tất cả đều thú vị để xem xét, nhưng đối với dữ liệu thời gian, nó không phải là hữu ích. Tôi muốn có thể hạn chế bố trí của một số trục, ví dụ, bằng cách đặt ra các nút theo thời gian chúng xuất hiện trong tập dữ liệu, trong khi vẫn giữ lại "bouncyness" của trực quan hóa. Điều này có thể sử dụng d3?Ràng buộc d3.js Hiển thị lực

+1

Vâng, [câu hỏi này] (http://stackoverflow.com/questions/15100060/d3-js-force-directed-layout-constrained-by-a-shape) nên cung cấp cho bạn một số con trỏ. –

Trả lời

6

Để xây dựng trên nhận xét của tôi, có, điều này là hoàn toàn có thể. Bố trí lực không thực sự định vị các nút, nó chỉ tính toán các vị trí. Trong trình xử lý sự kiện tick, bạn thường cung cấp chức năng quản lý vị trí. Ở đó, bạn có thể thêm các ràng buộc tùy ý hạn chế cách các nút có thể di chuyển.

Lấy một trong số stock examples, bạn có thể thực hiện những việc như sau để hạn chế tọa độ x trong phạm vi + -10 của vị trí dự định với y không bị giới hạn.

force.on("tick", function() { 
    node.each(function(d) { 
    var intended = scale(d.value); 
    d.x = d.px = Math.min(intended + 10, Math.max(intended - 10, d.px)); 
    }); 
    node.attr("cx", function(d) { return d.x; }) 
     .attr("cy", function(d) { return d.y; }); 
}); 

Đây là một khác example sử dụng bố cục lực để định vị nhãn. Ở đó, vị trí x bị bỏ qua (tức là hằng số) và chỉ có y bị ảnh hưởng bởi bố cục.

+0

Cảm ơn bạn, Lars! Tôi có thể hỏi, là: 'var dự định = scale (d.value)' được thay thế bởi 'var xpos = scale (d.date)' trong trường hợp của tôi, trong đó datetime là giá trị mà tôi muốn đặt vào trục x? – ericmjl

+1

Bạn chưa đăng bất kỳ mã nào vì vậy tôi không biết các biến của bạn được gọi là gì nhưng có, điều này sẽ chỉ định vị trí x. –

+0

Cảm ơn bạn Lars! Tôi chỉ có thể thử nghiệm nó sau khi sửa một số lỗi khác trong mã của tôi, và nó hoạt động tạm thời! Bây giờ để sửa đổi các vảy để đảm bảo nó hoạt động đúng. :-) Cảm ơn một lần nữa! – ericmjl

Các vấn đề liên quan