d3.js - d3js 用添加点很好地过渡线

标签 d3.js

假设我有一个 path我是用 d3 创建的就像是:

line = d3.line()
    .curve(d3.curveLinear)
    .x(function(d) { return x(d.x);})
    .y(function(d) { return y(d.y); });

data = [{x: 0, y: 0}, {x: 5, y: 5}, {x:10, y:10}];

myLine = svg.append("path")
        .attr("fill", "none")
        .attr("stroke", "steelblue")
        .datum(data)
        .attr("d", line);

这形成了一条从 0 到 10 的漂亮对角线。现在,如果我更新我的数据以进行一些更改并添加一些点:
data = [{x: 1, y: 1}, {x:2, y:3}, {x: 6, y: 7}, {x:9, y:9}];

并更新我的线路
myLine.datum(data).transition().duration(1000).attr("d", line);

它提供了一个奇怪的过渡,它滑动现有路径以适应新路径的前三个点,并笨拙地将最后一个点添加到末尾。

类似地,如果我更新它以减少点,它会缩短线,然后将其余部分滑过,而不是仅仅重新调整线的形状。

我明白为什么会发生这种情况,但我想知道是否有办法创建更平稳的过渡。

最佳答案

你应该看看这个 page而这个 github

.attrTween('d', function () { 
    return d3.interpolatePath(line(data), line(data2)); 
});

看看这个 fiddle

关于d3.js - d3js 用添加点很好地过渡线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402417/

相关文章:

javascript - 在 Karma/Jasmine 测试中模拟 Enter 键按下输入

javascript - Meteor js发布订阅 react 很慢

javascript - d3 和 svg 中的自定义上下文菜单

javascript - d3.parseDate 错误无法读取未定义的属性 'forEach'

javascript - SVG 路径似乎没有正确定位自身

javascript - 第一个和最后一个元素之间的连续循环

javascript - d3线图,从Object而不是CSV获取数据

javascript - 如何在刻度值中创建具有可变刻度间隔且刻度值之间具有相同距离的左轴

javascript - 使用 CSS 或 LESS 根据兄弟数量(不固定)计算 DIV 的宽度

javascript - D3JS - 在散点图中显示圆形和三 Angular 形