您描述的问题有点复杂,因为在 D3 中您首先必须在固定位置添加一个对象,然后您可以将其从原始位置设置为动画到另一个位置。
在您的示例中,我将根据先前的值计算新的(中间)初始位置,然后使用实际的最终值再次更新图表。这将创建一个从开始到最终位置的漂亮路径动画:
updateGraph([
[...].concat(computeLatestIntermediates()),
[...].concat(getLatestTimes())
]);
updateGraph([
[...].concat(getRealValues()),
[...].concat(getLatestTimes())
]);
或者,您可以将初始值设置为0
。这将创建一个从底部到目标值的漂亮动画:
updateGraph([
[..., 0, 0, 0, 0],
[...,10,12,13,14]
]);
updateGraph([
[..., 234, 245, 210, 170],
[..., 10, 12, 13, 14]
]);
顺便说一句:为折线图制作动画时,您通常还会遇到其他几个问题。其中一些包含在 Mike 的路径动画页面上。这里还有一个相关的问题。
编辑(更智能的解决方案):
您可以在绘图函数中实现这个两步绘图,而不是调用两次更新函数,如下所示:
function getPathData(d,i) { return "M 0,0 ... L n,n"; }
function getInitalTransform(d,i) { return "translate(...)"; }
function getFinalTransform(d,i) { return "translate(...)"; }
path
.attr("d", getPathData)
.attr("transform", getInitalTransform)
.transition()
.ease("linear")
.attr("transform", getFinalTransform);