gpt4 book ai didi

layout - 同一页面上d3强制布局的多个实例

转载 作者:行者123 更新时间:2023-12-04 20:14:55 25 4
gpt4 key购买 nike

我的目标是使用 d3 force 布局来显示共享相同节点的两个不同网络。例如,在四个人中,您可以定义一个社交网络和一个家谱网络;节点将是相同的(人),但链接(关系)可能不同。 尽管创建了两个单独的力布局、两个单独的 svg Canvas 并尝试定义单独的变量,但节点共享 x 和 y 位置信息。 这是一个最小的例子,其中拖动一个网络上的节点会改变它们在另一个网络中的位置:
http://amath.colorado.edu/student/larremore/nodesSharingPositiond3

下面,我发布了被调用来创建一个网络的函数,创建另一个网络的代码非常相似,但在所有实例中使用不同的变量名。创建两个网络的注释代码可以在 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();
}

最佳答案

我写了一个允许浏览生物的工具regulatory networks ,并排显示两个 SVG 面板。每个面板都包含一个由 d3.js API 绘制的强制布局网络。

我发现完成这项工作的关键是给 DOM 中的每个元素一个唯一的名称,其中可能存在重复。

就我而言,我使用了 _left_right足以满足每个面板元素,其中该元素分别位于左侧或右侧面板中。跟踪需要做大量工作,但网络渲染器可以将其调用和事件定位到正确的元素和网络。

在你的情况下:

.attr("id", function(d,i) {
return ("idx" + i);
})

您要更换 return值与唯一寻址节点关联的网络的东西。无论您使用索引编号方案还是基于后缀的方法,就像我一样,诀窍是确保所有 id名字是独一无二的。

关于layout - 同一页面上d3强制布局的多个实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13650377/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com