我正在更新节点和链接。我还想更改现有节点(圆圈)的半径。我如何更新例如特定的圈子?
当我在下面执行此操作时,它会更新所有圈子。
node.select("circle").attr("r", circleradius);
当我更新节点阵列时,没有任何变化。
nodes[index].size = 2000;
this is how the outputted html looks like
这是功能更新代码:
function update() {
// Restart the force layout.
force
.nodes(nodes)
.links(links)
.start();
// Update links.
link = link.data(links, function(d) { return d.target.id; });
link.exit().remove();
link.enter().insert("line", ".node")
.attr("class", "link");
// Update nodes.
node = node.data(nodes, function(d) { return d.id; });
node.exit().remove();
var nodeEnter = node.enter().append("g")
.attr("class", "node")
.on("click", click)
.call(force.drag);
nodeEnter.append("circle")
.attr("r", function(d) { return Math.sqrt(d.size) / 2 || 24.5; });
nodeEnter.append("text")
.attr("dy", ".35em")
.text(function(d) { return d.name; });
node.select("circle")
.style("fill", color);
}
答案 0 :(得分:0)
在使用d3.select之前,子元素不会自动更新。包裹你的头是一件很难的事,我不会进入这里。
但是出于实际目的,您需要做的是,在创建了力导向布局和元素之后,如果要更改用于size元素0的数据值并查看它更新,则代码需要像这样阅读:
nodes[0].size = 2000;
d3.selectAll("g").select("circle")
.attr("r", function(d) { return Math.sqrt(d.size) / 2 || 24.5; });