gpt4 book ai didi

javascript - 更新数据后保持D3图的位置

转载 作者:行者123 更新时间:2023-12-03 07:13:16 24 4
gpt4 key购买 nike

我遇到以下问题。我在 D3 中创建了一个图表。我添加了一个下拉菜单,其中图表的节点根据所选类别调整大小。为此,我编写了一个函数,每次在下拉菜单中选择一个选项时,该函数都会重新运行 javascript 代码。然而,更新后的图表出现在我的网站的末尾。有没有办法让图表保持在原来的位置?我尝试将其放在 div 中并修复位置,但没有成功。我希望我的问题很清楚。

在下面找到我的代码的玩具示例。

干杯!

<html lang="en">
<head>
<meta charset="utf-8">

<script type="text/javascript" src="http://d3js.org/d3.v3.js"></script>


<style type="text/css">

</style>


</head>
<body>

<select onchange="change(this)">
<option value="rad1">Option 1</option>
<option value="rad2">Option 2</option>
</select>

<p> This is some text above the plot </p>

<script type="text/javascript">

change('rad1')

function change(dd) {
update(dd.value)
}

function update(rad) {

var current = rad;

d3.selectAll('svg').remove();


var w = 500;
var h = 300;


var dataset = {
nodes: [
{ name:'Node 1',rad1: 1.31, rad2: 2.32 },
{ name:'Node 2',rad1: 2.12, rad2: 5.00 },
{ name:'Node 3',rad1: 40.30, rad2: 20.40 }
],
edges: [
{ source:0, target:0,rad1: 3.31 },
{ source:0, target:1,rad1: 3.31},
{ source:1, target:2,rad1: 20.31}
]
};


var force = d3.layout.force()
.nodes(dataset.nodes)
.links(dataset.edges)
.size([w, h])
.linkDistance([100])
.charge([-300])
.start();

var svg = d3.select("body")
.append("svg")
.attr("width", w)
.attr("height", h);

var edges = svg.selectAll("line")
.data(dataset.edges)
.enter()
.append("line")
.style("stroke", "#808080")
.style("stroke-width", 1)
.style("stroke-opacity", 0.1);


var nodes = svg.selectAll("circle")
.data(dataset.nodes)
.enter()
.append("circle")
.attr("r", function(d) {
if( current == "rad1") {
return d.rad1;
} else {
return d.rad2;
}
})
.style("fill", function(d, i) {
return '#000000';
})
.call(force.drag)
.on("click", function(d) {
console.log("Name: " + d.name);
});


force.on("tick", function() {

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

nodes.attr("cx", function(d) { return d.x; })
.attr("cy", function(d) { return d.y; });

});


}

</script>

<p> Here is more text below the plot </p>

</body>
</html>

最佳答案

问题是您将 SVG 附加到正文,因此它将始终显示在页面的最后。正确的方法是创建一个带有ID(唯一)的div(或其他任何东西):

<div id="svghere"></div>

然后附加 SVG:

var svg = d3.select("#svghere")
.append("svg")
.//the rest of the code

关于javascript - 更新数据后保持D3图的位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36535616/

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