1、force.tick():力學圖抖動的過程,一直持續到下個靜止狀態;跟force.alpha()有一定關系,目前還不知道什么關系
見帖子:https://stackoverflow.com/questions/13463053/calm-down-initial-tick-of-a-force-layout
2,、常用到的幾個函數:
size()
用於設定力學圖的作用范圍,使用方法為 force.size( [ x , y ] ),這個函數用於指定兩件事:
重力的重心位置為 ( x/2 , y/2 )
所有節點的初始位置限定為 [ 0 , x ] 和 [ 0 , y ] 之間(但並非之后也是如此)
如果不指定,默認為 [ 1 , 1 ] 。
用於設定力學圖的作用范圍,使用方法為 force.size( [ x , y ] ),這個函數用於指定兩件事:
重力的重心位置為 ( x/2 , y/2 )
所有節點的初始位置限定為 [ 0 , x ] 和 [ 0 , y ] 之間(但並非之后也是如此)
如果不指定,默認為 [ 1 , 1 ] 。
linkDistance()
指定結點連接線的距離,默認為20。如果距離是一個常數,那么各連接線的長度總是固定的;如果是一個函數,那么這個函數是作用於各連接線( source , target )的。
指定結點連接線的距離,默認為20。如果距離是一個常數,那么各連接線的長度總是固定的;如果是一個函數,那么這個函數是作用於各連接線( source , target )的。
linkStrength()
指定連接線的堅硬度,值的范圍為[ 0 , 1 ],值越大越堅硬。其直觀感受是:
值為1,則拖動一個頂點A,與之相連的頂點會與A保持linkDistance設定的距離運動
值為0,則拖動一個頂點A,與之相連的頂點不會運動,連接線會被拉長
指定連接線的堅硬度,值的范圍為[ 0 , 1 ],值越大越堅硬。其直觀感受是:
值為1,則拖動一個頂點A,與之相連的頂點會與A保持linkDistance設定的距離運動
值為0,則拖動一個頂點A,與之相連的頂點不會運動,連接線會被拉長
friction()
定義摩擦系數的函數,值的范圍為[ 0 , 1 ],默認為0.9。但是這個值其實並非物理意義上的摩擦,其實其意義更接近速度隨時間產生的損耗,這個損耗是針對每一個頂點的。
值為1,則沒有速度的損耗。
值為0,則速度的損耗最大。
定義摩擦系數的函數,值的范圍為[ 0 , 1 ],默認為0.9。但是這個值其實並非物理意義上的摩擦,其實其意義更接近速度隨時間產生的損耗,這個損耗是針對每一個頂點的。
值為1,則沒有速度的損耗。
值為0,則速度的損耗最大。
charge()
設定引力,是排斥還是吸引,默認值為-30。
值為+,則相互吸引,絕對值越大吸引力越大。
值為-,則相互排斥,絕對值越大排斥力越大。
設定引力,是排斥還是吸引,默認值為-30。
值為+,則相互吸引,絕對值越大吸引力越大。
值為-,則相互排斥,絕對值越大排斥力越大。
chargeDistance()
設定引力的作用距離,超過這個距離,則沒有引力的作用。默認值為無窮大。
gravity()
以 size 函數設定的中心產生重力,各頂點都會向中心運動,默認值為0.1。也可以設定為0,則沒有重力的作用。
以 size 函數設定的中心產生重力,各頂點都會向中心運動,默認值為0.1。也可以設定為0,則沒有重力的作用。
theta()
頂點數如果過多,計算的時間就會加大(O(n log n))。theta 就是為了限制這個計算而存在的,默認值為0.8。這個值越小,就能把計算限制得越緊。
頂點數如果過多,計算的時間就會加大(O(n log n))。theta 就是為了限制這個計算而存在的,默認值為0.8。這個值越小,就能把計算限制得越緊。
alpha()
設定動畫運動的時間,超過時間后運動就會停止。其實
force.start() 即 alpha(0.1)
force.stop() 即 alpha(0)
設定動畫運動的時間,超過時間后運動就會停止。其實
force.start() 即 alpha(0.1)
force.stop() 即 alpha(0)
3、D3.js force力導向圖用指定的字段確定link的source和target,默認是索引,也可以手動指定,如下:
https://stackoverflow.com/questions/23986466/d3-force-layout-linking-nodes-by-name-instead-of-index
defaultConfig.data.links.forEach(function (e) {
if(typeof e.source!="number"&&typeof e.target!="number") {
var sourceNode = defaultConfig.data.nodes.filter(function (n) {
return n.name === e.source;
})[0],
targetNode = defaultConfig.data.nodes.filter(function (n) {
return n.name === e.target;
})[0];
e.source = sourceNode;
e.target = targetNode;
}
});
4、(1)selectAll()的作用:如selectAll("line.link")類似jQuery選擇器,里面是根據元素、id或者class等選擇元素;
if(typeof e.source!="number"&&typeof e.target!="number") {
var sourceNode = defaultConfig.data.nodes.filter(function (n) {
return n.name === e.source;
})[0],
targetNode = defaultConfig.data.nodes.filter(function (n) {
return n.name === e.target;
})[0];
e.source = sourceNode;
e.target = targetNode;
}
});
4、(1)selectAll()的作用:如selectAll("line.link")類似jQuery選擇器,里面是根據元素、id或者class等選擇元素;
(2)//d3.event.translate 是平移的坐標值,d3.event.scale 是縮放的值
(3)px, py:節點上一個時刻的坐標 x, y:節點的當前坐標 weight:節點的權重;
文本:dx- x 軸方向的文本平移量 dy- y 軸方向的文本平移量;
圓形:cx cy--圓心坐標,r--圓半徑;
(4)force.start():該語句作用是對lines的數據補充坐標 weight等屬性;