2013-12-17 90 views
5

我想用強制佈局(用於可視化圖形)做一些有點不同尋常的事情。星座和所有的東西都很有趣,但是對於時間序列數據,這並沒有什麼幫助。我希望能夠通過某個軸約束佈局,例如,根據它們在數據集中出現的時間來佈置節點,同時仍保留可視化的「彈性」。這可能使用d3嗎?約束d3.js強制顯示

+1

是的,[這個問題](http://stackoverflow.com/questions/15100060/d3-js-force-directed-layout-constrained-by-a-shape)應該給你一些指針。 –

回答

6

爲了詳細說明我的評論,是的,這是完全可能的。力佈局實際上並不定位節點本身,它只是計算位置。在tick事件的處理程序中,您通常會提供處理定位的功能。在那裏,您可以添加限制節點如何移動的任意約束。

stock examples之一爲例,您可以執行如下操作,將x座標限制在y的不受限制的預期位置的±10範圍內。

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

這是另一個example,它使用強制佈局來定位標籤。在那裏,x位置被忽略(即恆定),只有y受佈局影響。

+0

謝謝,拉爾斯!我可以問的是:'var intended = scale(d.value)'應該被替換爲'var xpos = scale(d.date)'在我的情況下,其中datetime是我希望放在其上的值x軸? – ericmjl

+1

你還沒有發佈任何代碼,所以我不知道你的變量被調用,但是,這將指定x位置。 –

+0

謝謝拉爾斯!在修復了我的代碼中的一些其他錯誤之後,我只是能夠測試它,並且它臨時工作!現在修改比例以確保它正常工作。 :-) 再次感謝! – ericmjl