我的目標是使用d3強制佈局來顯示共享相同節點的兩個不同網絡。例如,在四個人當中,你可以定義一個社交網絡和一個家譜網絡;節點將是相同的(人),但鏈接(關係)可能不同。 儘管創建了兩個單獨的力佈局,兩個單獨的svg畫布,並試圖定義單獨的變量,節點共享x和y位置信息。這裏是一個小例子,在拖動一個網絡上的節點改變等網絡中的位置: http://amath.colorado.edu/student/larremore/nodesSharingPositiond3在同一頁面上的多個d3強制佈局實例
下面,我貼被稱爲創造了網絡的一個功能,和代碼來創建其他非常相似,但在所有情況下使用不同的變量名稱。用於創建兩個網絡的註釋代碼可在http://amath.colorado.edu/student/larremore/nodesSharingPositiond3/lib/minimal.js中找到,用於定義變量的腳本可在/driver/minimalScript.js中找到。< - 我沒有足夠的信譽來直接鏈接它。我很抱歉!
d3.force的工作方式,位置信息是全球性的,或被全球選中,或某事。任何人都可以闡明這一點嗎?我對保持位置信息分離的解決方案以及理解d3.force如何處理和更新位置計算感興趣。
function makeYNet() {
// This populates the YactiveLinks variable with the proper YLinks. The goal is to be able to only display links whose value is above some threshold.
for (var i=0; i<YLinks.length; i++) {
if (YLinks[i].link2 > thr) {
YactiveLinks.push(YLinks[i]);
}
}
// Add nodes and links to forceY
forceY
.nodes(YNodes)
.links(YactiveLinks);
// Draw lines
var Ylink = svgY.selectAll("line.link")
.data(YactiveLinks)
.enter()
.append("line")
.attr("class", "link")
.style("stroke-width", 2.0);
// Draw nodes
var Ynode = svgY.selectAll("circle.node")
.data(YNodes)
.enter().append("circle")
.attr("class", "node")
.attr("r", radius)
.attr("high",0)
.attr("id", function(d,i) {
return ("idy" + i);
})
.style("fill", function(d) { return color(d.group1); })
.call(forceY.drag)
;
// Define tick
forceY.on("tick", function() {
Ylink
.attr("x1", function(d) { return d.source.x; })
.attr("y1", function(d) { return d.source.y; })
.attr("x2", function(d) { return d.target.x; })
.attr("y2", function(d) { return d.target.y; });
Ynode.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });
});
// Start 'er up
forceY.start();
}
我正在嘗試做同樣的事情:在同一頁上同步兩個強制佈局的節點位置。由於Alex Reynolds的回覆,我有兩個部隊佈局。但是,我沒有在哪裏設置位置同步的鉤子。由於到DBLaremore的方法的鏈接不再工作,有沒有人有暗示從哪裏開始或可能鏈接到另一個例子? – tty56