gpt4 book ai didi

javascript - 从带线的数据转换日期和时间

转载 作者:太空狗 更新时间:2023-10-29 12:29:51 25 4
gpt4 key购买 nike

我使用 D3 V5 创建了这个图表。另外,我在 fiddle 上附上了示例数据,您可以 view by clicking here .

我已经包含了 tick 函数代码块,它在向左滑动的路径上附加了 x 和 y 刻度和线/数据的新域:

当 tick 函数执行时,线条会重建,使其看起来像弹跳。
重建线路的时候怎么会很流畅,一点弹跳都没有?

var tr = d3
.transition()
.duration(obj.tick.duration)
.ease(d3.easeLinear);

function tick() {
return setInterval(function() {
var newData = [];
var tickFunction = obj.tick.fnTickData;
if (tickFunction !== undefined && typeof tickFunction === "function") {
newData = tickFunction();
for (var i = 0; i < newData.length; i++) {
obj.data.push(newData[i]);
}
}

if (newData.length > 0) {
var newMaxDate, newMinDate, newDomainX;
if (isKeyXDate) {
newMaxDate = new Date(
Math.max.apply(
null,
obj.data.map(function(e) {
return new Date(e[obj.dataKeys.keyX]);
})
)
);
newMinDate = new Date(
Math.min.apply(
null,
obj.data.map(function(e) {
return new Date(e[obj.dataKeys.keyX]);
})
)
);
newDomainX = [newMinDate, newMaxDate];
} else {
newDomainX = [
d3.min(obj.data, function(d) {
return d[obj.dataKeys.keyX];
}),
d3.max(obj.data, function(d) {
return d[obj.dataKeys.keyX];
})
];
}

// update the domains
//x.domain([newMinDate, newMaxDate]);
if (obj.tick.updateXDomain) {
newDomainX = obj.tick.updateXDomain;
}
x.domain(newDomainX);
if (obj.tick.updateYDomain) {
y.domain(obj.tick.updateYDomain);
}

path.attr("transform", null);

// slide the line left
if (obj.area.allowArea) {
areaPath.attr("transform", null);
areaPath
.transition()
.transition(tr)
.attr("d", area);
}
path
.transition()
.transition(tr)
.attr("d", line);
svg
.selectAll(".x")
.transition()
.transition(tr)
.call(x.axis);
svg
.selectAll(".y")
.transition()
.transition(tr)
.call(y.axis);

// pop the old data point off the front
obj.data.shift();
}
}, obj.tick.tickDelay);
}
this.interval = tick();

最佳答案

弹跳 实际上是转换 d 属性时的预期结果,它只是一个字符串。

这里有几种解决方案。无需过多重构您的代码,一个简单的方法是使用 Mike Bostock 在此 bl.ocks 中编写的 pathTween 函数:https://bl.ocks.org/mbostock/3916621 .在这里,我对其进行了一些更改,以便您可以像这样传递数据:

path.transition()
.transition(tr)
.attrTween("d", function(d) {
var self = this;
var thisd = line(d);
return pathTween(thisd, 1, self)()
})

这是 fork 的插件:https://plnkr.co/edit/aAqpdSb9JozwHsErpqa9?p=preview

关于javascript - 从带线的数据转换日期和时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56765565/

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