2013-12-17 27 views
5

Güç düzenleri ile sıradan bir şey yapmak istiyorum (grafikleri görselleştirmek için). Takımyıldızları ve hepsine bakmak eğlencelidir, ancak zaman çizelgeleri verileri için bu yararlı değildir. Düzeni bir eksenle sınırlamak isterim, örneğin, düğümleri bir veri kümesinde göründükleri zamana göre yerleştirerek, görselleştirmenin "zıplamasını" koruyarak. Bu d3 kullanarak mümkün mü?Kısıtlı d3.js Kuvvet göstergesi

+1

Evet, [bu soru] (http://stackoverflow.com/questions/15100060/d3-js-force-directed-layout-constrained-by-a-shape) size vermelidir bazı gör işaretçileri. –

cevap

6

Benim yorumumu detaylandırmak için, evet, bu mükemmel bir şekilde mümkündür. Kuvvet düzeni aslında düğümlerin kendisini konumlandırmaz, sadece konumları hesaplar. tick olayının işleyicisinde, genellikle konumlandırmayı işleyen işlevi sağlarsınız. Orada, düğümlerin nasıl hareket edeceğini kısıtlayan keyfi kısıtlamalar ekleyebilirsiniz.

stock examples'dan birini kullanarak, x koordinatını sınırsız y ile hedeflenen konumun + -10'u içinde sınırlamak için aşağıdaki gibi şeyler yapabilirsiniz. İşte

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; }); 
}); 

pozisyon etiketlere kuvvet düzenini kullanan başka example olduğunu. Burada, x konumu göz ardı edilir (yani sabit) ve sadece y, düzenden etkilenir.

+0

Teşekkürler, Lars! Ben şunu sorabilir miyim: "var amaçlanan = ölçek (d.value)" ile değiştirilecek olması gerekiyor "var xpos = ölçek (d.date)" datetime nerede koymak istediğim değer benim durumumda x-ekseni? – ericmjl

+1

Herhangi bir kod göndermediniz, bu yüzden değişkenlerinizin ne arandığını bilmiyorum, ancak evet, bu x konumunu atayacaktır. –

+0

Teşekkürler Lars! Kodumdaki bazı hataları düzeltdikten sonra test edebildim ve geçici olarak çalışıyor! Şimdi düzgün çalıştığından emin olmak için ölçekleri değiştirmek. :-) Tekrar teşekkürler! – ericmjl