gpt4 book ai didi

javascript - 如何使用 D3.js 方法重新绘制路径?

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

我似乎无法获得 .enter() 和 .exit 路径以使其正常工作。对于下面的代码,每次我尝试重绘路径时,它都会保留旧路径。

我敢猜测问题出在 .attr("d",stepline(csProg)) 上。我在想它应该更像 .attr("d",function(d) { stepline(d); }) 或类似的东西,但我无法让它工作。有什么建议吗?

function drawCloseChart(mysvg,mydata,cx1,cx2,cy1,cy2,oq)
{

var x = d3.scale.linear().domain([360*60, 390*60]).range([cx1, cx2]),
y = d3.scale.linear().domain([0,oq]).range([cy1,cy2]),
z = d3.scale.category10();


var targetg = mysvg.append("svg:g");

//code to draw x-axis
//code to draw y-axis

var stepline = d3.svg.line()
.x(function(d) { return x(d.time); })
.y(function(d) { return y(d.val); })
.interpolate("step-after");

var chartData = [];
chartData.redraw = function()
{


var cpg = cprog.selectAll("path").data(csProg);
cpg.enter()
.append("path")
.attr("d",stepline(csProg))
.attr("fill","none")
.attr("stroke-width","2")
.attr("stroke","black");

cpg.exit().remove();

}
chartData.redraw();
return chartData;
}

稍后在代码中我会调用(或类似的东西):

setInterval(function() { updateDate(); chartData.redraw(); },1000)

但是,旧路径不会被删除。

编辑:这是一个 JSFiddle,其中包含我所看到的问题。 http://jsfiddle.net/namit101/k8kUZ/26/

最佳答案

enterexit 仅分别针对新添加的数据或刚刚删除的数据调用。因此,enterexit不会在每次调用redraw时都执行,除非你的数据发生变化,然后,它只会被调用新添加的数据或刚刚删除的数据。

对于您的示例,您需要为数据创建一个唯一标识符,以便 D3 知道要删除哪些路径以及要添加哪些路径。这可以通过将函数传递给 data 方法以及 mydata 变量来完成。

var cpg = cprog.selectAll("path").data(mydata, function(d) {
return d.time + "-" + d.value;
});

这是更新的 JSFiddle .

关于javascript - 如何使用 D3.js 方法重新绘制路径?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11633300/

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